Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.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 使用扩展运算符多次连续设置状态_Javascript_Reactjs_Asynchronous_Setstate_Spread Syntax - Fatal编程技术网

Javascript 使用扩展运算符多次连续设置状态

Javascript 使用扩展运算符多次连续设置状态,javascript,reactjs,asynchronous,setstate,spread-syntax,Javascript,Reactjs,Asynchronous,Setstate,Spread Syntax,我在本地存储器中存储了一些值。当我的组件挂载时,我想将这些值加载到状态。但是,只有最后添加的属性才会添加到状态。我已经检查了本地存储上的值,它们都在那里。此外,当我在条件块中记录变量(desc、pic或foo)时,它们就在那里 起初,我认为每个后续的if块都在重新写入状态,但事实并非如此,因为我正确地使用了spread操作符(我想!),在所有预先存在的属性之后添加新属性 我认为问题在于最后一个if块中的代码在第一个if块中设置状态之前运行。如何编写代码,以便将本地存储中的所有三个属性都保存到状态

我在本地存储器中存储了一些值。当我的组件挂载时,我想将这些值加载到状态。但是,只有最后添加的属性才会添加到状态。我已经检查了本地存储上的值,它们都在那里。此外,当我在条件块中记录变量(desc、pic或foo)时,它们就在那里

起初,我认为每个后续的if块都在重新写入状态,但事实并非如此,因为我正确地使用了spread操作符(我想!),在所有预先存在的属性之后添加新属性

我认为问题在于最后一个if块中的代码在第一个if块中设置状态之前运行。如何编写代码,以便将本地存储中的所有三个属性都保存到状态中

//我期望的状态是什么
{
文本区域:{
描述:“一些描述”,
图片:“一些图片”,
福:“一些福”
}
}
//国家是什么
{
文本区域:{
福:“一些福”
}

}
通过浅层合并传递的参数,您可能会被React批处理setState调用所捕获。这将导致仅应用最后一次更新。您可以通过只调用一次setState来解决此问题,例如:

componentDidMount(){
const desc=window.localStorage.getItem('desc');
const pic=window.localStorage.getItem('pic');
const foo=window.localStorage.getItem('foo');
这是我的国家({
textArea:Object.assign({},
描述?{desc}:{},
pic{pic}:{},
foo?{foo}:{}
)
});

}
通过浅层合并传递的参数,您可能会被React批处理setState调用所捕获。这将导致仅应用最后一次更新。您可以通过只调用一次setState来解决此问题,例如:

componentDidMount(){
const desc=window.localStorage.getItem('desc');
const pic=window.localStorage.getItem('pic');
const foo=window.localStorage.getItem('foo');
这是我的国家({
textArea:Object.assign({},
描述?{desc}:{},
pic{pic}:{},
foo?{foo}:{}
)
});

}
由于调用
setState()
(异步函数)3次,因此每次都会覆盖状态。尝试在同一个调用中设置所有3个属性。
this.setState({…this.state})
中没有必要这样做,因为
setState
只覆盖您明确定义的内容,如果您在此处不提及它们,则不会删除状态道具。因为您调用了
setState()
(异步函数)3次,你每次都在覆盖状态。尝试在同一个调用中设置所有3个属性。
this.setState({…this.state})
中没有必要这样做,因为
setState
只覆盖您明确定义的内容,如果您在此处未提及它们,则不会删除状态道具。