You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Redux-form嵌套字段验证报错求助:无法设置undefined的email属性

解决redux-form嵌套字段验证的TypeError问题

嘿,这个问题我之前踩过一模一样的坑!咱们来理清楚问题出在哪,以及怎么解决:

问题根源

你在validate函数里直接写errors.individual.email = 'Required',但初始状态下errors.individual是undefined——JavaScript不允许给一个undefined对象的属性赋值,所以才会抛出TypeError: Cannot set property 'email' of undefined。

而当你用单个email作为Field的name时,直接给errors.email赋值就没问题,因为不需要先访问一个不存在的父级对象。

两种解决方案

方案1:手动初始化嵌套对象

在给errors.individual.email赋值前,先检查并创建errors.individual这个空对象:

// validate.js 中的验证逻辑
export const validate = values => {
  const errors = {};
  
  if (!values.individual?.email) { // 可选使用可选链操作符,避免values.individual为undefined的情况
    // 先初始化 individual 对象
    if (!errors.individual) {
      errors.individual = {};
    }
    errors.individual.email = 'Required';
  }
  
  // 其他验证规则...
  return errors;
};

方案2:用Lodash的set方法简化操作

如果你的项目已经引入了Lodash,可以用它的set方法自动处理嵌套对象的创建,省去手动初始化的步骤:

import { set } from 'lodash';

export const validate = values => {
  const errors = {};
  
  if (!values.individual?.email) {
    set(errors, 'individual.email', 'Required');
  }
  
  // 其他验证规则...
  return errors;
};

额外提示

别忘了确保你的表单**初始值(initialValues)**里包含individual对象,比如:

const initialValues = {
  individual: {
    email: ''
  }
};

这样values.individual就不会是undefined,避免验证逻辑里的判断出错。

内容的提问来源于stack exchange,提问作者D2DN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:31:45