代码之家  ›  专栏  ›  技术社区  ›  Shawn Matthews

监视变量的更改和更新状态

  •  0
  • Shawn Matthews  · 技术社区  · 8 年前

    我目前正在尝试确定在React/Redux中监视变量并在变量更改时使用它更新状态的选项。

    这与我在这里问的另一个问题有关( Math in Redux-form. Adding Fields together 如果需要上下文),但特定于如何监视和调用更改事件。

    我使用3个状态(映射到道具),然后像这样将它们添加到一起。。。

    let total = (this.props.sub1 + this.props.sub2 + this.props.sub3);
    

    然后我想更新我的redux状态 total 每次 全部的 更改。。。

    目前,我正在观察每个子状态的变化,然后像这样更新总数。。。

        if(this.props.sub1 != prevProps.sub1 || 
           this.props.sub2 != prevProps.sub2 ||
           this.props.sub3 != prevProps.sub3){ 
            this.props.dispatch(change('mainForm', 'total', total));}
    

    这是可行的,但似乎应该有一种方法来监视总的vs每个sub来设置此状态。像这样的。。。

    if (this.props.total != prevProps.total){this.props.dispatch(change('mainForm', 'total', total));}
    

    但这是可行的:)

    有什么想法?

    2 回复  |  直到 8 年前
        1
  •  1
  •   squgeim    8 年前

    React(和Redux)主张对所有应用程序状态都有一个单一的真实来源。在这种情况下 total 只是从 sub s、 因此,不将其包括在商店中是有意义的(如果 子系统 ,只需在组件本身中计算即可。

    这可以在几分钟内完成 mapStateToProps 在里面 connect ,或使用选择器(如 reselect )。

    connect(
      function(state, ownProps) {
        return {
          total: state.total.sub1 + state.total.sub2
        }
      }
    )
    
        2
  •  1
  •   Denis Liger    8 年前

    正在创建 this.props.total 在以下情况下有意义 total 使用sub1、sub2和sub3在不同组件中渲染。 全部的 可按容器计算。

    此外,请考虑使用重新选择( https://github.com/reactjs/reselect )。