使用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 - 如果愚蠢的问题道歉
答案 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上面的回答更好地回答了这个问题。