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

如何在JSON Schema中根据布尔值条件修改另一个布尔开关值

实现开关联动:switchA控制switchB的禁用与自动赋值

要实现你要的效果,得明确一个核心点:JSON Schema仅负责数据校验和约束,无法直接修改表单字段的值。自动把switchB设为false的逻辑,需要结合你使用的表单渲染库(比如react-jsonschema-form、vue-json-schema-form等)的自定义事件处理来完成,以下是具体步骤:

1. JSON Schema层面:先做数据合规约束

用if/then/else语法定义规则,确保当switchA为false时,switchB的值必须是false(否则校验不通过):

{
  "type": "object",
  "properties": {
    "switchA": {
      "type": "boolean",
      "title": "开关A"
    },
    "switchB": {
      "type": "boolean",
      "title": "开关B"
    }
  },
  "allOf": [
    {
      "if": {
        "properties": {
          "switchA": { "const": false }
        },
        "required": ["switchA"]
      },
      "then": {
        "properties": {
          "switchB": { "const": false }
        },
        "required": ["switchB"]
      }
    }
  ]
}

2. 表单库层面:实现自动赋值与禁用

以常用的react-jsonschema-form为例,通过监听表单数据变化,主动修改switchB的值并控制禁用状态:

import Form from "@rjsf/core";

const schema = { /* 上面定义的Schema */ };
const uiSchema = {
  // 根据switchA的值控制switchB的禁用状态
  switchB: {
    "ui:disabled": (formData) => !formData?.switchA
  }
};

const App = () => {
  const handleChange = ({ formData }) => {
    // 当switchA变为false时,强制将switchB设为false
    if (formData.switchA === false && formData.switchB !== false) {
      return {
        ...formData,
        switchB: false
      };
    }
    return formData;
  };

  return (
    <Form
      schema={schema}
      uiSchema={uiSchema}
      onChange={handleChange}
    />
  );
};

如果是Vue的表单库,思路完全一致:监听switchA的变化事件,在回调里修改switchB的绑定值,并设置禁用属性。

3. 为什么你之前的配置无效?

你尝试的const: false只是Schema的校验规则,它只会在数据不符合时抛出校验错误,不会主动修改表单字段的值;而value: false大多是UI组件的默认值设置,不会响应switchA的状态变化。必须通过表单的事件监听逻辑,主动触发数据修改才能实现需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 07:02:46