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

React Final Form三级级联选择默认值设置及报错修复

解决React Final Form三级联动下拉的默认选中与报错问题

问题根源

切换第一/第二级选项时出现Cannot convert undefined or null to object错误,是因为第三级下拉尝试对undefined或null执行Object.entries操作;而第一级选中后未自动选中第二级首个选项,是缺少联动赋值逻辑。

修复方案

1. 给第三级下拉加空值安全校验

修改第三级Select的options生成逻辑,确保当第二级对应的子数据不存在时,传入空对象避免报错:

<Select
  label="Third Level"
  name="third"
  options={Object.entries(formData[values.second] || {}).map(([key, value]) => ({
    value: key,
    label: value
  }))}
/>

这里用formData[values.second] || {}兜底,就算对应值是undefined,也会用空对象让Object.entries正常执行。

2. 第一级选中后自动设置第二级默认值

在第一级Select的onChange事件里,手动调用React Final Form的change方法,设置第二级的首个选项:

<Select
  label="First Level"
  name="first"
  options={Object.entries(formData).map(([key, value]) => ({
    value: key,
    label: key
  }))}
  onChange={(event, newValue) => {
    // 更新第一级字段值
    change('first', newValue.value);
    // 获取当前第一级对应的第二级数据
    const firstLevelChildren = formData[newValue.value];
    if (firstLevelChildren) {
      // 取第二级的第一个key作为默认选中值
      const firstSecondOption = Object.keys(firstLevelChildren)[0];
      change('second', firstSecondOption);
      // 同时自动设置第三级的默认值(可选,按需添加)
      const secondLevelChildren = firstLevelChildren[firstSecondOption];
      if (secondLevelChildren) {
        const firstThirdOption = Object.keys(secondLevelChildren)[0];
        change('third', firstThirdOption);
      }
    }
  }}
/>

3. 第二级切换时联动更新第三级

同样在第二级的onChange里处理第三级的默认值,确保切换后第三级能正确加载并选中首个选项:

<Select
  label="Second Level"
  name="second"
  options={Object.entries(formData[values.first] || {}).map(([key, value]) => ({
    value: key,
    label: key
  }))}
  onChange={(event, newValue) => {
    change('second', newValue.value);
    // 获取当前第二级对应的第三级数据
    const secondLevelChildren = formData[values.first]?.[newValue.value];
    if (secondLevelChildren) {
      const firstThirdOption = Object.keys(secondLevelChildren)[0];
      change('third', firstThirdOption);
    }
  }}
/>

效果说明

这几个修改后:

  • 选中第一级选项时,第二级会自动选中首个选项,同时第三级也会联动加载并选中对应首个选项
  • 切换任何一级选项时,下级下拉都会安全加载数据,不会再出现Cannot convert undefined or null to object错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 21:15:41