[英]React Native set state an element of array of objects
我的状态为数组:
this.state = {
data: [
{
quantity: 0
}
],
tempQuantity: 0
};
我想在TextInput
更新我的data[0].quantity
,所以我使用:
onChangeText={tempQuantity =>
this.setState({
tempQuantity,
data: [...this.state.data, { quantity: tempQuantity }]
})
}
我有一个<Text>
来显示结果:
<View>
<Text>{this.state.data[0].quantity}</Text>
</View>
但是我每次都会得到0
!
如何更新数组中每个对象的每个元素?
如果以这种方式使用它,它将动态地工作吗? 我的意思是每次按下<Button>
时都想创建一个对象(具有主对象的所有属性)。 [例如: quantity
为10的data[0]
-数量为12的data[1] with
和...]
要对数组中的每个元素使用单个事件处理程序,可以传入index
以及event
并更新该特定索引上元素的quantity
。
例
class App extends React.Component { state = { data: [ { quantity: 0 }, { quantity: 10 }, { quantity: 100 } ] }; handleChange = (event, index) => { const { value } = event.target; this.setState(previousState => { const data = [...previousState.data]; data[index] = {...data[index], quantity: value }; return { data }; }); }; render() { return ( <div> {this.state.data.map((element, index) => ( <div key={index}> <input type="number" value={element.quantity} onChange={event => this.handleChange(event, index)} /> </div> ))} </div> ); } } ReactDOM.render(<App />, document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script> <div id="root"></div>
您必须先修改data
数组,然后再将其设置为state。 您可以通过以下方式进行操作:
假设您有一个包含以下各项的数组:
var data = [
{name: 'a', age: 12},
{name: 'b', age: 15}
]
您需要先修改它,然后才能通过以下方式再次设置为状态:
var newData = data.map((item) => {
return {...item, age: 20}
})
现在您的newData
将是
var newData = [
{name: 'a', age: 20},
{name: 'b', age: 20}
]
可以将newData
分配给state
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.