Joh*_*ohn 17 reactjs react-native
我试图只更新数组状态中的一个元素,但我不知道如何做到这一点.
州
constructor(props) {
super(props);
this.state = {
markers: [],
};
}
Run Code Online (Sandbox Code Playgroud)
设置状态
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
},
],
});
}
Run Code Online (Sandbox Code Playgroud)
如果我想更改标记的第四个元素中的键,我该怎么做?
谢谢
May*_*kla 37
重要的是,我们不应该直接改变状态数组,总是在新数组中进行更改然后使用setState来更新状态值.
正如Doc所建议的:
永远不要直接改变this.state,将this.state视为不可变.
更新状态数组的基本流程是:
1-首先创建状态数组的副本.
2-查找项目的索引(如果索引可用,则跳过此项目).
3-更新该索引处的item值.
4-使用setState更新状态值.
可能有多种解决方案:
1-使用array.map并检查要更新的元素,当您发现该元素返回具有更新键值的新对象时,否则只返回相同的对象.像这样:
let newMarkers = markers.map(el => (
el.name==='name'? {...el, key: value}: el
))
this.setState({ markers });
Run Code Online (Sandbox Code Playgroud)
2-我们还可以使用array.findIndex查找该特定项的索引,然后更新该项的值.像这样:
let markers = [...this.state.markers];
let index = markers.findIndex(el => el.name === 'name');
markers[index] = {...markers[index], key: value};
this.setState({ markers });
Run Code Online (Sandbox Code Playgroud)
如果我们知道项目的索引,则不需要循环,直接我们可以写:
let markers = [ ...this.state.markers ];
markers[index] = {...markers[index], key: value};
this.setState({ markers });
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
39282 次 |
| 最近记录: |