Javascript 如何更新处于反应状态的嵌套数组?

Javascript 如何更新处于反应状态的嵌套数组?,javascript,reactjs,state,Javascript,Reactjs,State,我正在尝试更新我的状态,以便嵌套数组被清空,但状态的其余部分保持不变 我的状态对象看起来像: this.state = { data: { type: "FeatureCollection", features: [1,2,3,4] } } 我最接近工作的地方是: this.setState(prevState => ({ data: [...prevState.data, (this.state.data.fe

我正在尝试更新我的状态,以便嵌套数组被清空,但状态的其余部分保持不变

我的状态对象看起来像:

this.state = {
    data: {
        type: "FeatureCollection",
        features: [1,2,3,4]
    }
}
我最接近工作的地方是:

this.setState(prevState => ({
    data: [...prevState.data, (this.state.data.features.length = 0)]
}));
我通过这种方法得到的控制台警告是:

Do not mutate state directly. Use setState()  react/no-direct-mutation-state
但这怎么可能呢


非常感谢:

您应该像这样更新状态。状态中的数据是对象,而不是数组

this.setState(prevState => ({
    data: {...prevState.data, features: [] }
}));

您应该像这样更新状态。状态中的数据是对象,而不是数组

this.setState(prevState => ({
    data: {...prevState.data, features: [] }
}));

我在代码中看到的第一个问题是将数据从对象更改为数组。所以至少应该是这样

this.setStateprevState=>{ 数据:{…prevState.data,this.state.data.features.length=0} }; 然后您仍在通过执行此操作来改变状态。state.data.features.length=0,因此要解决此问题,您需要不可变地更新该数组:

this.setStateprevState=>{ 数据:{ …prevState.data, 特性:[]//或任何您需要的新阵列 } }; 如果您想在末尾添加另一个元素,可以执行以下操作:

this.setStateprevState=>{ 数据:{ …prevState.data, 功能:[…prevState.data.features,5] } };
我在代码中看到的第一个问题是将数据从对象更改为数组。所以至少应该是这样

this.setStateprevState=>{ 数据:{…prevState.data,this.state.data.features.length=0} }; 然后您仍在通过执行此操作来改变状态。state.data.features.length=0,因此要解决此问题,您需要不可变地更新该数组:

this.setStateprevState=>{ 数据:{ …prevState.data, 特性:[]//或任何您需要的新阵列 } }; 如果您想在末尾添加另一个元素,可以执行以下操作:

this.setStateprevState=>{ 数据:{ …prevState.data, 功能:[…prevState.data.features,5] } };
你想更新什么?你是在让数组变空吗?@WillJenkins你怎么知道它不在构造函数中?我认为这是setState的内部。@Brianthonpson-它告诉您使用setState,您正在这样做,但也有一个直接赋值给this.state.xx,这似乎更可能是问题所在。@UKS是的,我只想使数组变空。您想更新什么?你是在让数组变空吗?@WillJenkins你怎么知道它不在构造函数中?我认为这是setState的内部。@Brianthonpson-它告诉您使用setState,您正在这样做,但也有一个直接赋值给this.state.xx,这似乎更可能是问题所在。@UKS是的,我只想使数组为空