React JSON Schema动态条件表单下拉选项未显示问题
问题背景
开发目标为构建条件表单,支持用户配置选中特定选项值时的联动规则,例如选中绿色选项时,自动展示输入框、单选框、复选框等对应表单项,效果参考:
问题现象
当前基于JSON Schema实现表单生成能力,支持用户向JSON配置对象动态添加选项。经调试确认新增选项已成功写入JSON状态对象,但无法在条件表单中标签为「Value」的下拉选择框内正常渲染展示。
页面共有三个下拉选择框:
- 第一个下拉框:加载展示所有表单项
- 标签为「Value」的第二个下拉框:需根据第一个下拉框的选中值动态加载对应选项,当前渲染异常问题即出现在该下拉框
问题现象参考:
关联代码
初始select配置(useState定义)
const [select1, setSelect1] = useState({ id: uuid(), type: 'select', properties: { label: 'Select1', options: [ { id: uuid(), optionName: 'red 🔴', value: '', childOptions: [], }, { id: uuid(), optionName: 'green 🟢', value: '', childOptions: [], }, { id: uuid(), optionName: 'blue 🔵', value: '', childOptions: [], }, ], }, parentId: null, });
新增选项逻辑
function addOptionsVal() { setElement2((prevState) => { const options = [ ...prevState.properties.options, { id: uuid(), optionName: optionVal, value: '', childOptions: [], }, ]; return { ...prevState, properties: { ...prevState.properties, options, }, }; }); setOptionVal(''); }
问题根因
- 「Value」下拉框的选项数据源写死绑定了初始状态
select1的options列表,没有读取动态更新后的表单配置状态,新增选项写入的是element2状态,两个状态没有同步,导致下拉框拿不到最新选项。 - 所有选项的
value字段初始值都设为空字符串,重复空值会导致React下拉框渲染时出现识别异常,无法正常挂载选项。
修复方案
- 替换「Value」下拉框的数据源逻辑,不要硬编码读取初始状态,改为根据第一个下拉框的选中值,实时读取对应表单项配置的最新
properties.options作为渲染源,示例代码:
// 移除硬编码的数据源引用 // const options = select1.properties.options // 改为读取当前选中字段的实时配置 const activeField = fieldList.find(field => field.id === firstDropdownSelectedId) const dropdownOptions = activeField?.properties.options ?? []
- 新增选项时给
value字段设置非空唯一值,避免空值导致的渲染异常,修改新增选项逻辑:
{ id: uuid(), optionName: optionVal, value: optionVal.trim() || uuid(), // 优先用输入的选项名作为value,空值时用生成的id兜底,保证唯一 childOptions: [], }
- 给「Value」下拉框绑定的选中值字段增加重置逻辑,当选项列表更新时,如果当前选中值不在新的选项列表中,自动清空选中值,避免出现选中值不存在的异常状态。
内容的提问来源于stack exchange,提问作者Amritpal Singh
相关产品推荐
相关产品推荐

