我想在状态数组的末尾添加一个元素,这是正确的方法吗?

this.state.arrayvar.push(newelement);
this.setState({ arrayvar:this.state.arrayvar });

我担心用push修改数组可能会导致麻烦——它安全吗?

另一种方法是复制数组,setstate看起来很浪费。


当前回答

//------------------code is return in typescript 

const updateMyData1 = (rowIndex:any, columnId:any, value:any) => {

    setItems(old => old.map((row, index) => {
        if (index === rowIndex) {
        return Object.assign(Object.assign({}, old[rowIndex]), { [columnId]: value });
    }
    return row;
}));

其他回答

ES6最简单的方法:

this.setState(prevState => ({
    array: [...prevState.array, newElement]
}))

当我想修改数组状态时,我也遇到了类似的问题 同时保留元素在数组中的位置

这是一个在like和different之间切换的函数:

    const liker = (index) =>
        setData((prevState) => {
            prevState[index].like = !prevState[index].like;
            return [...prevState];
        });

正如我们所说,函数接受数组状态元素的索引,然后我们继续修改旧状态并重建状态树

我所做的是在状态之外更新一个值,并执行forceupdate(),由react管理的东西越少越好,因为您可以更好地控制更新的内容。 此外,如果更新速度很快,为每次更新创建一个新数组可能代价太大

this.setState((prevState) => {   
    const newArray = [...prevState.array];   
    newArray[index] = updatedValue;   
    return { array: newArray };   
});

目前很多人都面临着更新useState钩子状态的问题。我使用这种方法来安全地更新它,并想在这里分享它。

这就是我的状态

const [state, setState] = useState([])

假设我有一个对象名为obj1,我想把它附加到我的状态中。我建议这样做

setState(prevState => [...prevState, obj1])

这将安全地在末尾插入对象,并保持状态一致性