reactjs - 向文本框属性中的状态添加动态值
问题描述
我在这样的文本框中迭代一个状态属性:
{this.state.selectedQuestion.map(e=>{
return (<ul>
<li key={e.id}> {e.id}</li>
<li key={e.id}> {e.question}</li>
<li key={e.id}> <ul> {e.options.map((t,a)=>{
return(<li key={e.id}><input type="text" name={"editValue"+a} onChange={this.checkRadioChange} /> </li>)
})}</ul> </li>
<li><button onClick={()=>this.editQuestion(e)}>Edit</button></li>
</ul>
)
})}
现在我的状态是这样的:
this.state ={
selectedQuestion:[],
editValue0:'',
editValue1:'',
editValue2:'',
editValue3:''
}
onchange 事件onChange={this.checkRadioChange}
是这样的:
checkRadioChange=(event)=>{
this.setState({[event.target.name]: event.target.value},()=>{
// console.log('this.state.selectedQuestion[0].options: ',this.state.selectedQuestion[0].options)
console.log("THIS.STATE",this.state)
})
问题是我无法将输入中的动态值等同于相应的状态属性,例如:
return(<li key={e.id}><input type="text" name={"editValue"+a} onChange={this.checkRadioChange} /> </li>)
应该改为
return(<li key={e.id}><input type="text" name={"editValue"+a} value="this.state.editvalue0" onChange={this.checkRadioChange} /> </li>)
return(<li key={e.id}><input type="text" name={"editValue"+a} value="this.state.editvalue1" onChange={this.checkRadioChange} /> </li>)
return(<li key={e.id}><input type="text" name={"editValue"+a} value="this.state.editvalue2" onChange={this.checkRadioChange} /> </li>)
return(<li key={e.id}><input type="text" name={"editValue"+a} value="this.state.editvalue3" onChange={this.checkRadioChange} /> </li>)
因为li
正在迭代。所以我尝试了类似的东西:
return(<li key={e.id}><input type="text" name={"editValue"+a} value={this.state.editvalue + {a}} onChange={this.checkRadioChange} /> </li>)
和
return(<li key={e.id}><input type="text" name={"editValue"+a} value={this.state.editvalue + a}" onChange={this.checkRadioChange} /> </li>)
向文本框属性中的状态添加动态值
我在这样的文本框中迭代一个状态属性:
{this.state.selectedQuestion.map(e=>{
return (<ul>
<li key={e.id}> {e.id}</li>
<li key={e.id}> {e.question}</li>
<li key={e.id}> <ul> {e.options.map((t,a)=>{
return(<li key={e.id}><input type="text" name={"editValue"+a} onChange={this.checkRadioChange} /> </li>)
})}</ul> </li>
<li><button onClick={()=>this.editQuestion(e)}>Edit</button></li>
</ul>
)
})}
现在我的状态是这样的:
this.state ={
selectedQuestion:[],
editValue0:'',
editValue1:'',
editValue2:'',
editValue3:''
}
onchange 事件onChange={this.checkRadioChange}
是这样的:
checkRadioChange=(event)=>{
this.setState({[event.target.name]: event.target.value},()=>{
// console.log('this.state.selectedQuestion[0].options: ',this.state.selectedQuestion[0].options)
console.log("THIS.STATE",this.state)
})
问题是我无法将输入中的动态值等同于相应的状态属性,例如:
return(<li key={e.id}><input type="text" name={"editValue"+a} onChange={this.checkRadioChange} /> </li>)
应该改为
return(<li key={e.id}><input type="text" name={"editValue"+a} value="this.state.editvalue0" onChange={this.checkRadioChange} /> </li>)
return(<li key={e.id}><input type="text" name={"editValue"+a} value="this.state.editvalue1" onChange={this.checkRadioChange} /> </li>)
return(<li key={e.id}><input type="text" name={"editValue"+a} value="this.state.editvalue2" onChange={this.checkRadioChange} /> </li>)
return(<li key={e.id}><input type="text" name={"editValue"+a} value="this.state.editvalue3" onChange={this.checkRadioChange} /> </li>)
因为li
正在迭代。所以我尝试了类似的东西:
return(<li key={e.id}><input type="text" name={"editValue"+a} value={this.state.editvalue + {a}} onChange={this.checkRadioChange} /> </li>)
和
return(<li key={e.id}><input type="text" name={"editValue"+a} value={this.state.editvalue + a}" onChange={this.checkRadioChange} /> </li>)
和
return(<li key={e.id}><input type="text" name={"editValue"+a} value={'this.state.editvalue' + a}" onChange={this.checkRadioChange} /> </li>)
但它要么抛出错误,要么显示undefined[object][object]
结果。
注意:这selectedQuestion
是动态的,所以请不要selectedQuestion:[]
混淆this.state
但它要么抛出错误,要么显示undefined[object][object]
结果。
注意:1)动态来了,selectedQuestion
所以请不要混淆selectedQuestion:[]
。this.state
2) For testing, i tried return(<li key={e.id}><input type="text" name={"editValue"+a} value={this.state.editvalue0} onChange={this.checkRadioChange} /> </li>)
并且它成功更新了editvalue0
in this.state
,所以如果我能够在 value 属性中设置动态状态,它就可以解决问题。
3) To test, I tried giving a static value to `value` attribute like so:
value={this.state.editValue1}
我添加了一个静态值,this.state.editValue1
如下所示:
this.state ={ selectedQuestion:[], editValue0:'', editValue1:'one', editValue2:'', editValue3:'' }
并将 的值应用于one
所有迭代的输入,我还能够在editValue1
in 中获取更新的值this.state
。
但是当我这样做时:value={t.opt}
然后我能够获得以前在 json 中添加的每个值,但是当我输入时,这些词没有添加到文本框中(如预期的那样)。ny json 是这样的:
[
{"id":1,
"question":"Which continent india belongs to?",
"options":[
{"opt":"Australia"},
{"opt":"Europe"},
{"opt":"Asia"},
{"opt":"Africa"}
]
},
{"id":2,
"question":"New Delhi is capital of which country?",
"options":[
{"opt":"Croatia"},
{"opt":"India"},
{"opt":"America"},
{"opt":"Iraq"}
]
},
{"id":3,
"question":"Who was the first man to step on Moon?",
"options":[
{"opt":"Abdul Kalam"},
{"opt":"Albert Einstein"},
{"opt":"Sheldon Cooper"},
{"opt":"Salman Khan"}
]
}
]
4) You are welcome to point out any better way, but please do answer on the dynamic value also. Thanks
解决方案
我创建了一个 codepen 示例来演示您的问题案例,我不确定您的问题的根本原因是什么,但我能够相应地同步反应状态和 UI 输入之间的值。
class ListElement extends React.Component {
constructor() {
super()
this.state = {
selectedQuestions: [1,2,3,4],
editValue0: 'value0',
editValue1: 'value1',
editValue2: 'value2',
editValue3: 'value3'
}
}
onChange = (event) => {
this.setState({
[event.target.name]: event.target.value
})
}
render () {
return (
<ul>
{
this.state.selectedQuestions.map((item, index) => (
<li key={index}>
<label>{`editValue${index}`}</label>
<input type="text"
value={this.state[`editValue${index}`]}
name={`editValue${index}`}
onChange={this.onChange}/>
</li>
))
}
</ul>
)
}
}
这是 codepen.io 的链接:https ://codepen.io/anon/pen/bXgWoM
希望能帮助到你 :)
推荐阅读
- git - 等待 VCS 标记完成,然后再开始 TeamCity 链中的下一个构建
- firebase - 为每个客户端动态创建子域?
- material-ui - 为什么在 Next.js 中的页面之间导航时 material-ui 样式会闪烁?
- css - 如何更改wordpress中的内联样式
- unity3d - Unity 视频播放器 - 播放默认视频,直到另一个视频完全加载
- doctrine-orm - “语义错误”第 0 行,第 14 列“用户 u WHERE”附近:错误:未定义“用户”类
- r - 围绕从封闭的主体内设计派生的 SD 计算 CI
- git - 如何在我的本地文件夹中集成现有的远程仓库
- vue.js - Vue CLI 插件如何修改 transpileDepencies?
- testing - 使用 Testcafe 将网络日志与 const 进行比较