我似乎有问题将数据推入一个状态数组。 我正试图以这种方式实现它:
this.setState({ myArray: this.state.myArray.push('new value') })
但我相信这是不正确的方式,并导致问题的可变性?
我似乎有问题将数据推入一个状态数组。 我正试图以这种方式实现它:
this.setState({ myArray: this.state.myArray.push('new value') })
但我相信这是不正确的方式,并导致问题的可变性?
当前回答
功能组件和反应钩子
const [array,setArray] = useState([]);
最后推值:
setArray(oldArray => [...oldArray,newValue] );
在开始时推值:
setArray(oldArray => [newValue,...oldArray] );
其他回答
用下面的方法可以检查和更新对象
this.setState(prevState => ({
Chart: this.state.Chart.length !== 0 ? [...prevState.Chart,data[data.length - 1]] : data
}));
绝不建议直接改变状态。
在以后的React版本中,推荐的方法是在修改状态时使用updater函数来防止竞争条件:
将字符串推到数组的末尾
this.setState(prevState => ({
myArray: [...prevState.myArray, "new value"]
}))
将字符串推到数组的开头
this.setState(prevState => ({
myArray: ["new value", ...prevState.myArray]
}))
将对象推到数组的末尾
this.setState(prevState => ({
myArray: [...prevState.myArray, {"name": "object"}]
}))
将对象推到数组的开头
this.setState(prevState => ({
myArray: [ {"name": "object"}, ...prevState.myArray]
}))
使用es6可以这样做:
this.setState({ myArray: [...this.state.myArray, 'new value'] }) //simple value
this.setState({ myArray: [...this.state.myArray, ...[1,2,3] ] }) //another array
传播的语法
使用react钩子,你可以这样做
const [countryList, setCountries] = useState([]);
setCountries((countryList) => [
...countryList,
"India",
]);
你根本不应该管理这个国家。至少,不是直接的。如果你想要更新你的数组,你会想要这样做。
var newStateArray = this.state.myArray.slice();
newStateArray.push('new value');
this.setState(myArray: newStateArray);
直接处理状态对象是不可取的。你也可以看看React的不可变性帮助。
https://facebook.github.io/react/docs/update.html