Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果我在一个对象中有一个数组,而该对象在一个大数组中,我如何更新React本机状态?_Javascript_Reactjs_React Native_State - Fatal编程技术网

Javascript 如果我在一个对象中有一个数组,而该对象在一个大数组中,我如何更新React本机状态?

Javascript 如果我在一个对象中有一个数组,而该对象在一个大数组中,我如何更新React本机状态?,javascript,reactjs,react-native,state,Javascript,Reactjs,React Native,State,我在州里有这样的事情: Array [ Object { "checked": "", "currentQuantity": 0, "id_in_extras": 206, "id_in_extrasCurrent": 0, "maxQuantity": 1, "minQuantity": 1, "selected": Array [], }, Object { "checked": "", "currentQu

我在州里有这样的事情:

Array [
  Object {
    "checked": "",
    "currentQuantity": 0,
    "id_in_extras": 206,
    "id_in_extrasCurrent": 0,
    "maxQuantity": 1,
    "minQuantity": 1,
    "selected": Array [],
  },
  Object {
    "checked": "",
    "currentQuantity": 0,
    "id_in_extras": 576,
    "id_in_extrasCurrent": 1,
    "maxQuantity": 1,
    "minQuantity": 1,
    "selected": Array [],
  },
  Object {
    "checked": "",
    "currentQuantity": 0,
    "id_in_extras": 618,
    "id_in_extrasCurrent": 2,
    "maxQuantity": 9,
    "minQuantity": 0,
    "selected": Array [],
  },
]
我有一些问题

1)是否有更有效的方法更新指定对象中的变量“checked”?我喜欢这样:

this.setState(prevState => ({
extrasCurrent: prevState.extrasCurrent.map(
obj => (obj.id_in_extrasCurrent === index ? Object.assign(obj, { checked:true }) : obj)
)
}));
2)如何在大数组中插入和删除特定对象的“选定”数组


谢谢大家!

您是否尝试像这样推动数组.state.obj.selected.push()然后调用此.forceUpdate()以使用更新的状态重新渲染组件?

一个稍微简单的方法是使用扩展运算符
.map()
中的当前索引
i

删除:

deleteIndex = i;
const {myList} = this.state;
this.setState({myList: myList.filter((obj, i) => i !== deleteIndex)});
加上:

const {myList} = this.state;
const newObj = {};
this.setState({
    myList: [...myList, newObj]
});

不,我没有尝试,但我读到这样更新状态不是一个好的做法,this.state.something=1,您需要使用这个.setState({something:1})…如果不需要,您也不应该强制更新,因为它会反作用于生命周期。您是对的,但您应该调用forceUpdate或setState({})在尝试像这样直接更新状态时重新渲染。state.obj='something'。虽然这不是一个好的做法。
const {myList} = this.state;
const newObj = {};
this.setState({
    myList: [...myList, newObj]
});