React native 如何从inputText更新对象内部的值
抱歉,伙计们,我仍在学习react native,我想从输入中更新每个数量(quantity)项的值,所以我有这个状态React native 如何从inputText更新对象内部的值,react-native,React Native,抱歉,伙计们,我仍在学习react native,我想从输入中更新每个数量(quantity)项的值,所以我有这个状态 this.state={ selectedObject={ otherAttributes:'', items:[ {name:'a',qty:''}, {name:'b',qty:''}, ], }, } 然后我有这个函数来呈现TextInput renderPage(){ return this.state.selected
this.state={
selectedObject={
otherAttributes:'',
items:[
{name:'a',qty:''},
{name:'b',qty:''},
],
},
}
然后我有这个函数来呈现TextInput
renderPage(){
return this.state.selectedObject.items.map(item ,i)=>
<View style={{margin:15}}>
<Text>Name: {item.name}</Text>
<TextInput style={styles.input} keyboardType='numeric' maxLength={10}
value={?}
onChangeText={?}
}}/>
</View>
)
}
renderPage(){
返回此.state.selectedObject.items.map(项目,i)=>
名称:{item.Name}
)
}
我不知道在值和onchangeText中做什么
这是我在文本输入中尝试的
renderPage(){
const itemqty = this.state.selectedObject.items;
return itemqty.map((item,i)=>
<View style={{margin:15}}>
<Text>Name: {item.name}</Text>
<TextInput style={styles.input} keyboardType='numeric'
value={itemqty[i].qty}
onChangeText={(qty)=>{
this.setState({items[i].qty: qty});
}}/>
</View>
)
}
renderPage(){
const itemqty=this.state.selectedObject.items;
返回项目数量映射((项目,i)=>
名称:{item.Name}
{
this.setState({items[i].qty:qty});
}}/>
)
}
在尝试了这个之后,我意识到值不能像在setState中一样具有“[i]”。因为我试图在设置state时将值qty也转到受尊重的项目qty
因此,我期望的是,我可以从输入中更改项目数量的值,在这种情况下,有2个项目可用,但稍后它可以是3,4,5,6个项目,每个项目都有数量,并将其设置为受尊重的状态
谢谢您必须将修改后的状态属性传递给setState PS:我必须更新以反映JUnitus L关于不改变组件状态的评论
renderPage(){
const itemqty = this.state.selectedObject.items;
return itemqty.map((item,i)=>
<View style={{margin:15}}>
<Text>Name: {item.name}</Text>
<TextInput style={styles.input} keyboardType='numeric'
value={item.qty}
onChangeText={(qty)=>{
let newSelectedObject = {...this.state.selectedObject};
newSelectedObject.items = [...newSelectedObject.items];
newSelectedObject.items[i] = {...newSelectedObject.items[i], qty};
this.setState({selectedObject: newSelectedObject});
}}/>
</View>
)
}
尽量避免状态突变,不要直接更新数组
hanldeChange = (value, index) => {
const items = [
...this.state.selectedObject.items.slice(0, index),
Object.assign({}, this.state.selectedObject.items[index], { qty: value }),
...this.state.selectedObject.items.slice(index + 1),
];
this.setState(prevState => ({
selectedObject: {
...prevState.selectedObject,
items: items,
},
}));
};
在你的输入中做什么
<TextInput
style={styles.input}
keyboardType="numeric"
value={this.state.selectedObject.items[i].qty}
onChangeText={qty => this.hanldeChange(qty, i)}
/>
this.hanldeChange(数量,i)}
/>
如果这是一个表单,我建议您使用redux表单。不要直接操作状态,请避免状态变异。执行this.setState({selectedObject:newSelectedObject})没有任何意义代码>因为您在此处更改了值newSelectedObject.items[i].qty=qty代码>谢谢@JuniusL。请发表评论。为了反映这一点,我更新了我的答案。阅读更多关于状态突变的信息
<TextInput
style={styles.input}
keyboardType="numeric"
value={this.state.selectedObject.items[i].qty}
onChangeText={qty => this.hanldeChange(qty, i)}
/>