首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >值在setState reactjs中的对象中相互覆盖

问值在setState reactjs中的对象中相互覆盖
EN

Stack Overflow用户
提问于 2017-12-09 03:30:29
回答 2查看 235关注 0票数 0

当用户导航回设置过滤器的页面时,我正在尝试预先填充已保存在redux存储中的过滤器值。然而,当我要设置状态时,我遇到了最后一个设置值覆盖现有值的问题。下面是我在构造函数中设置状态的方法:

代码语言:javascript
复制
this.state = {
  hierarchyTableFilters: {
    hierarchy: null,
    signOffStatus: null,
  },
};

然后这就是我如何用redux中存储的数据来设置被调用函数的状态:

代码语言:javascript
复制
const {userState} = this.props.userInfo;
const previouslySelectedFilter = userState.state.hierarchyTableFilters;

if (previouslySelectedFilter) {
  this.setState({
    hierarchyTableFilters: {
      hierarchy: previouslySelectedFilter.hierarchy,
      signOffStatus: previouslySelectedFilter.signOffStatus,
    },
  });

无论最后设置的是什么状态,都是唯一显示为预过滤的过滤器。有没有办法在一个对象中为两个不同的值设置状态,或者我必须以不同的方式来做这件事?

EN

回答 2

Stack Overflow用户

发布于 2017-12-09 03:36:06

如果需要根据先前的本地状态设置本地状态,则应改用setState回调模式。

代码语言:javascript
复制
this.setState(previousState => ({ ... }))

这是因为setState会进行批量更新。请参阅setState上的文档

票数 1
EN

Stack Overflow用户

发布于 2017-12-09 04:25:02

您能否扁平化您的数据结构以利用setState合并功能?

代码语言:javascript
复制
this.state = {
   filtersHierarchy: null
   filtersSignOffStatus: null
 };

后一段是:

代码语言:javascript
复制
if (previouslySelectedFilter) {
  const { hierarchy, signOffStatus } = previouslySelectedFilter;
  let newState = {};
  if (hierarchy) newState.filtersHierarchy = hierarchy;
  if (signOffStatus) newState.filtersSignOffStatus = signOffStatus;
  this.setState(newState);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47720992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档