尝试从validate函数中访问redux store

时间:2018-03-06 12:11:52

标签: redux-form

使用Redux-form,我遇到了验证问题。

我想访问商店以在验证中引用一段状态。

我有标准的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_object(因此动作和减速器工作正常)

我是否需要在组件内声明validate函数(与mapStateToProps连接)才能访问this.props.whatever ??如果是这样的话,如果我从导出reduxForm()调用它,它是否有效?

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

2 个答案:

答案 0 :(得分:0)

你几乎就在那里。

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

然后状态将出现在验证道具中:

reduxForm({
    form: 'wizard',
    validate => (values, { stateForValidation }) => { 
        if(values.myField === stateForValidation)) {
            errors.myField = 'invalid'
        }
    }
})(connect(
    ({ stateForValidation }) => ({ stateForValidation })
)(form))

答案 1 :(得分:0)

如果有人关心我最终使用

在Field级别处理验证
<Field
validate={this.validateAddress} ...> 

然后是组件方法:

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

让我可以访问道具。但是@pariesz上面的回答更好地回答了这个问题。