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 js状态的json数组_Javascript_Reactjs - Fatal编程技术网

Javascript 更新处于react js状态的json数组

Javascript 更新处于react js状态的json数组,javascript,reactjs,Javascript,Reactjs,我有一个多选下拉列表。每当我选择一个选项时,我都需要将该数据添加到状态。 当我单击第一个选项时,我得到如下数据 [{id:"1", name:"Ind"}] 当我单击第二个选项时,我会得到如下数据(当前选择了两个选项) 在multiselect的onChange中,我调用以下函数 handleChange = (options) => { var output = []; if(options !== null && options !== undefin

我有一个多选下拉列表。每当我选择一个选项时,我都需要将该数据添加到状态。 当我单击第一个选项时,我得到如下数据

[{id:"1", name:"Ind"}]
当我单击第二个选项时,我会得到如下数据(当前选择了两个选项)

在multiselect的onChange中,我调用以下函数

handleChange = (options) => {
    var output = [];
    if(options !== null && options !== undefined){
        console.log(options); //    [{id:"1", name:"Ind"}, {id:"2", name:"Aus"}]
        this.setState(prevState => {
            selectedCountries:options
        });
    }
};
它不起作用

我期待着这样

selectedCountries:[
    {
        id:"1",
        name:"Ind"
    },
    {
        id:"2",
        name:"Aus"
    }
]

如何通过reactjs实现这一点?

您的
setState
语法不正确

    this.setState({
        selectedCountries:options
    });
只有当您需要基于先前的状态更新状态时,才需要使用更新程序函数,在这种情况下,您需要从更新程序函数返回一个您没有执行的对象

看起来像

    const newlyAddedOption = {id:"3", name:"UK"}
    this.setState(prevState => {
        return { selectedCountries:[...prevState.selectedCountries, newlyAddedOption]}
    });


但是,这目前对您没有用处,因为您可以同时获得所有选项。

更改此.setState(prevState=>{selectedCountries:options});对于这个.setState({selectedCountries:options}),它不是一个对象数组。它是ok.array of objects。如果我选择3个选项,状态中只更新2个值。原因可能是什么?在设置状态后是否记录了这些。当我选择一个新选项时,你可能也想检查一下,我会得到所有选择的数据,比如[{id:“1”,name:“Ind”},{id:“2”,name:“Aus”}]你检查了我在上面的评论中链接的问题了吗
    const newlyAddedOption = {id:"3", name:"UK"}
    this.setState(prevState => {
        return { selectedCountries:[...prevState.selectedCountries, newlyAddedOption]}
    });
    const newlyAddedOption = {id:"3", name:"UK"}
    this.setState(prevState => ({
        selectedCountries: [...prevState.selectedCountries, newlyAddedOption]
    }));