如何根据其他状态更改更新一个状态项?

Posted

技术标签:

【中文标题】如何根据其他状态更改更新一个状态项?【英文标题】:How to update one state item based on other state changes? 【发布时间】:2019-04-30 07:46:15 【问题描述】:

我正在使用反应上下文来管理某些元素的显示/隐藏,因为这些元素取决于多个服务器调用的返回数据。根据其他状态变化更新上下文状态的正确方法是什么?

这是我尝试过的,但它没有工作,因为它变成了一个无限循环。所有prevState 项都包含null 或来自服务器的返回数据。

componentDidUpdate(prevProps, prevState) 
  this.setState(
    showX: (
      prevState.a &&
      prevState.b &&
      prevState.c
    ),
    showY: (
      prevState.d
    )
  )

【问题讨论】:

【参考方案1】:

您应该在componentDidUpdate 中调用setState,仅使用检查道具或状态是否实际更改的条件语句。还可以使用!!Boolean constructor 获取布尔值

componentDidUpdate(prevProps, prevState) 
  const  a, b, c, d  = this.props;
  if (a !== prevState.a || b !== prevState.b || c !== prevState.c || d !== prevState.d) 
    this.setState(
      showX: !!(
        prevState.a &&
        prevState.b &&
        prevState.c
      ),
      showY: !!prevState.d
    )
  


【讨论】:

上下文中没有道具。 抱歉打错了,prevProps 应该是 prevState 在答案中。更新了

以上是关于如何根据其他状态更改更新一个状态项?的主要内容,如果未能解决你的问题,请参考以下文章

图标类名不会在状态更改时更新

如何根据设置的主题更改颤动中的状态栏图标和文本颜色?

如何使用状态动态更改 React Native 转换?

按下另一个按钮后,列表磁贴按钮会更改状态

如何使用 bloc flutter 更改单个列表项的状态?

React Hooks 表单处理:使用多个字符串项和一个数组项更新对象的状态