代码之家  ›  专栏  ›  技术社区  ›  Dale King

尝试从validate函数中访问redux存储

  •  2
  • Dale King  · 技术社区  · 7 年前

    使用Redux表单时,我遇到了验证问题。

    我想访问存储以引用验证中的一个状态。

    我有标准的redux表单导出:

    function mapStateToProps({address_object}) {
      return{
        address_object: address_object}
    }
    
        export default reduxForm({
          form: 'wizard',
          destroyOnUnmount: false,
          forceUnregisterOnUnmount: true,
          validate,
        })(
          connect(mapStateToProps,mapDispatchToProps)(WizardFormFirstPage)
        );
    

    和我的验证功能:

    const validate = (values, props) => {
      console.log("DEBUG :",props)
    ... if / else etc
    

    这让我可以看到表单的道具

    然而,我想对存储在状态中的东西运行验证。类似于:

        if (<something in state> === values.<thing>) {
     errors.field = "broken"}
    

    控制台记录验证收到的道具,我无法让它看到状态中的任何内容。很明显,我可以在WizardFormFirstPage组件中看到address\u对象(因此操作和还原器工作正常)

    我是否需要在组件(与mapStateToProps连接)内声明validate函数才能访问它。道具。无论什么如果是这样的话,如果我从export reduxForm()调用它,它会工作吗??

    redux noob-如果有愚蠢的问题,请道歉

    2 回复  |  直到 7 年前
        1
  •  2
  •   Peter Riesz    7 年前

    你快到了。

    连接表单时,请在中添加验证所需的状态 mapStateToProps

    该状态将在验证道具中可用:

    reduxForm({
        form: 'wizard',
        validate => (values, { stateForValidation }) => { 
            if(values.myField === stateForValidation)) {
                errors.myField = 'invalid'
            }
        }
    })(connect(
        ({ stateForValidation }) => ({ stateForValidation })
    )(form))
    
        2
  •  -1
  •   Dale King    7 年前

    如果有人在乎的话,我最终在现场处理验证

    <Field
    validate={this.validateAddress} ...> 
    

    然后组件方法:

    validateAddress = () => { 
    errors = {} 
    // validation stuff
    errors._error = "string to display" //use this instead of errors.fieldname = ""
    return errors
    }
    

    这让我可以使用道具。然而,上面的@pariesz答案更好地回答了这个问题。