在使用映射函数通过数组循环时,如何更新一个特定元素的状态。
<View style={{ marginBottom: 20 }}>
{
this.props.addresses.map(addr => {
return (
<View style={{ marginRight: 10 }} key={addr.label}>
<View>
<Text style={styles.labelTextStyle}>{addr.label}</Text>
</View>
</View>
);
})
}
</View>
我将如何更新一个特定元素(addr.label)的状态?
您不能直接在循环中调用SetState
来自React Docs:
setState()不会立即突变。 等待国家过渡。访问此。 方法可能会返回现有值。没有 保证对SetState的通话和呼叫的呼叫同步操作可能 批次获得性能。
您可以做的是
eventHandler(idx, val) {
var newState = {}
newState[idx] = val;
this.setState(newState);
}
在视图中,假设您有一个需要触发处理程序的按钮
<View style={{ marginBottom: 20 }}>
{
this.props.addresses.map(addr, idx => {
return (
<View style={{ marginRight: 10 }} key={addr.label}>
<View>
<Text style={styles.labelTextStyle}>{addr.label}</Text>
<Button onPress={this.eventHandler.bind(this, idx, addr.label}><Button>
</View>
</View>
);
})
}
</View>
您可以做这个
array.map(itam => {
this.setState({foo: bar});
return 'something';
});