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

从mapState向Redux表单字段返回一个值,该值在更新时会更改。

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

    我正在使用Redux Saga将数据返回到state。我想将该状态设置为Redux表单中的字段值。我想我可以用

    dispatch(change('form', 'field', 'value')); 
    

    复杂的是在saga返回值后处理这个问题。从而阻止了比赛。我在HOC中的mapstatetops中具有所需的值。是否有必要观察该道具的更改,并在更改时设置Redux表单值?

    到目前为止,我研究的内容包括设置新的初始值。很乐意提供任何必要的代码,但我想从这里开始,看看与制作文本墙相比,什么能真正帮助解决这个问题。

    2 回复  |  直到 7 年前
        1
  •  1
  •   Anthony    7 年前
    componentDidUpdate(prevProps) {
      if(this.props.propOfInterest != prevProps.propOfInterest) {
        //dispatch change()
      }
    }
    

    您可以在中捕获更新 componentDidUpdate() ; componentWillReceiveProps() 正在从React 16.3开始弃用,并将在React 17中删除

        2
  •  1
  •   pkuzhel    7 年前

    我通常会连接一个mapDispatchToProps函数,该函数将为我进行更改,并在组件的 componentWillReceiveProps

    我假设您有mapStateToProps:

    const mapStateToProps = state => ({
        myValue: state.myValue
    });
    

    有一个

    const mapDispatchToProps = dispatch => ({
        changeFormValue: value => dispatch(change('form', 'field', value))
    });
    

    现在在您的 componentWillReceiveProps(nextProps) 执行:

    if(this.props.myValue !== nextProps.myValue) {
        this.props.changeFormValue(nextProps.myValue);
    }