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