如何在React Native中更新数组状态
我正在尝试仅更新数组状态中的一个元素,但不确定如何执行此操作。
constructor(props) { super(props);
this.state = {
markers: [],
};
}
setCurrentLocation() { var root = this;
root.setState({
markers: [
...root.state.markers,
{
coordinate: {
latitude: parseFloat(root.state.currentLat),
longitude: parseFloat(root.state.currentLon)
},
key: root.state.currentLat,
image: pinCurrentLocation
},
],
});
}
如果我想更改标记的第四个元素中的键,该怎么做?
谢谢
回答:
重要的一点是,我们不应该直接更改状态数组,而要始终在新数组中进行更改,然后使用setState更新状态值。
如 建议:
切勿直接更改this.state,将this.state视为不可变。
更新状态数组的基本流程是:
首先创建状态数组的副本。
查找项目的索引(如果有索引,请跳过这一步)。
更新该索引处的项目值。
使用setState更新状态值。
可能有多种解决方案:
使用
并检查要更新的元素,当发现该元素返回具有已更新键值的对象的新对象时,否则返回相同的对象。像这样:
let newMarkers = markers.map(el => ( el.name==='name'? {...el, key: value}: el
))
this.setState({ markers });
我们还可以使用
查找该特定项目的索引,然后更新该项目的值。像这样:
let markers = [...this.state.markers];let index = markers.findIndex(el => el.name === 'name');
markers[index] = {...markers[index], key: value};
this.setState({ markers });
如果我们知道项目的索引,则不需要循环,我们可以直接编写:
let markers = [ ...this.state.markers ];markers[index] = {...markers[index], key: value};
this.setState({ markers });
以上是 如何在React Native中更新数组状态 的全部内容, 来源链接: utcz.com/qa/426221.html