我似乎有问题将数据推入一个状态数组。 我正试图以这种方式实现它:
this.setState({ myArray: this.state.myArray.push('new value') })
但我相信这是不正确的方式,并导致问题的可变性?
我似乎有问题将数据推入一个状态数组。 我正试图以这种方式实现它:
this.setState({ myArray: this.state.myArray.push('new value') })
但我相信这是不正确的方式,并导致问题的可变性?
当前回答
你破坏了React的原则,你应该克隆旧的状态,然后将其与新数据合并,你不应该直接操纵你的状态, 你的代码应该是这样的
fetch (http://localhost: 8080”)。然后(response => response.json)。然后(json ={这个setState ({mystate ...这个state university)。我的状态,杰森]
其他回答
setState([...prevState, {
label: newState.name,
value: newState.id
}]);
正在与下拉菜单工作,并希望在那里实现这个场景,我发现了这个简单的解决方案下拉多个值。
功能组件和反应钩子
const [array,setArray] = useState([]);
最后推值:
setArray(oldArray => [...oldArray,newValue] );
在开始时推值:
setArray(oldArray => [newValue,...oldArray] );
绝不建议直接改变状态。
在以后的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]
}))
在这里,您不能像这样将对象推到状态数组中。你可以用普通数组来推。 这里你需要设置状态,
this.setState({
myArray: [...this.state.myArray, 'new value']
})
React-Native
如果你也想要你的用户界面(例如。ur flatList)是最新的,使用PrevState: 在下面的例子中,如果用户点击按钮,它将添加一个新对象到列表中(包括在模型和UI中)。
data: ['shopping','reading'] // declared in constructor
onPress={() => {this.setState((prevState, props) => {
return {data: [new obj].concat(prevState.data) };
})}}.