你可以使用 antd 的 Form 组件和 Radio 组件来实现这个需求。

首先,你需要定义一个父组件来管理表单数据,并设置父单选框的初始值。然后,使用 Form 组件来包裹父单选框和子单选框,并使用 getFieldDecorator 方法来绑定表单数据。

在父单选框的 onChange 事件中,通过设置父组件的 state 来更新表单数据。根据选中的父单选框的值,你可以使用条件语句来判断是否禁用另一个父单选框的子单选框。

下面是一个示例代码:

import React from 'react';
import { Form, Radio } from 'antd';

class MyForm extends React.Component {
  state = {
    radio1Value: 'A',
    radio2Value: 'A',
  };

  handleRadio1Change = e => {
    const value = e.target.value;
    this.setState({
      radio1Value: value,
      // 如果选中了 A,则禁用 radio2 的子单选框
      radio2Value: value === 'A' ? 'A' : this.state.radio2Value,
    });
  };

  handleRadio2Change = e => {
    this.setState({
      radio2Value: e.target.value,
    });
  };

  render() {
    const { getFieldDecorator } = this.props.form;

    return (
      <Form>
        <Form.Item label='父单选框1'>
          {getFieldDecorator('radio1', {
            initialValue: this.state.radio1Value,
          })(<Radio.Group onChange={this.handleRadio1Change}>
            <Radio value='A'>选项 A</Radio>
            <Radio value='B'>选项 B</Radio>
            <Radio value='C'>选项 C</Radio>
          </Radio.Group>)}        </Form.Item>

        <Form.Item label='父单选框2'>
          {getFieldDecorator('radio2', {
            initialValue: this.state.radio2Value,
          })(<Radio.Group onChange={this.handleRadio2Change}>
            <Radio value='A' disabled={this.state.radio1Value === 'A'}>选项 A</Radio>
            <Radio value='B' disabled={this.state.radio1Value === 'A'}>选项 B</Radio>
            <Radio value='C' disabled={this.state.radio1Value === 'A'}>选项 C</Radio>
          </Radio.Group>)}        </Form.Item>
      </Form>
    );
  }
}

const WrappedMyForm = Form.create()(MyForm);

export default WrappedMyForm;

在上面的示例中,我们使用了 Form.create() 方法来创建一个高阶组件,以便在组件中使用 getFieldDecorator 方法。使用 getFieldDecorator 方法将表单字段与表单数据进行绑定。

父单选框的 onChange 事件中,我们根据选中的值来更新表单数据,并根据条件语句来判断是否禁用子单选框。

注意:在使用 antd 的 Form 组件时,需要使用 getFieldDecorator 方法来绑定表单数据,否则无法获取表单数据的值。


原文地址: https://www.cveoy.top/t/topic/pmkA 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录