React native 如何从inputText更新对象内部的值

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

抱歉,伙计们,我仍在学习react native,我想从输入中更新每个数量(quantity)项的值,所以我有这个状态

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)}
/>