我似乎有问题将数据推入一个状态数组。 我正试图以这种方式实现它:
this.setState({ myArray: this.state.myArray.push('new value') })
但我相信这是不正确的方式,并导致问题的可变性?
我似乎有问题将数据推入一个状态数组。 我正试图以这种方式实现它:
this.setState({ myArray: this.state.myArray.push('new value') })
但我相信这是不正确的方式,并导致问题的可变性?
当前回答
如果你使用:
const[myArr, setMyArr] = useState([]);
添加:
setMyArr([...myArr, value]);
至于移除:
let index = myArr.indexOf(value);
if(index !== -1)
setPatch([...myArr.slice(0, index), ...myArr.slice(index, myArr.length-1)]);
其他回答
你可以使用.concat方法创建包含新数据的数组副本:
this.setState({ myArray: this.state.myArray.concat('new value') })
但是要注意.concat方法在传递数组-[1,2]时的特殊行为。concat(“foo”3,'酒吧')将导致(1、2、“foo”,3,'酒吧']。
功能组件和反应钩子
const [array,setArray] = useState([]);
最后推值:
setArray(oldArray => [...oldArray,newValue] );
在开始时推值:
setArray(oldArray => [newValue,...oldArray] );
setState([...prevState, {
label: newState.name,
value: newState.id
}]);
正在与下拉菜单工作,并希望在那里实现这个场景,我发现了这个简单的解决方案下拉多个值。
使用es6可以这样做:
this.setState({ myArray: [...this.state.myArray, 'new value'] }) //simple value
this.setState({ myArray: [...this.state.myArray, ...[1,2,3] ] }) //another array
传播的语法
我想现在回答这个问题有点晚了,但对于那些新来的人来说
你可以使用这个叫做immer的小包
请看这个例子:https://immerjs.github.io/immer/produce