子组件传值给父组件以及解决在Form中Select value失效问题

269 阅读1分钟

问题:React、antd

  • 子组件: 两个select框使用Form.Item包裹,实现切换第一个select的时候,第二个select清空。想使用给第二个select框绑定value,在第一个select变化函数里每次setValue(绑定给第二个select),但是value属性无效,绑定不上。
  • 父组件: 使用Form 组件包含子组件,及其他筛选内容。

解决办法:将子组件的第一个select 每次变化调用onChange函数,父组件每次调用这个函数 说明select1的内容发生变化,在这个函数中将第二个select 值设为undefined。

ps:(在父组件的函数中每次获取变化的e,父组件传了一个函数给子组件,子组件将值传入给父组件函数中)。

//子组件
export const Son = (
    changeSelect,
}: {
    changeSelect?: (e: any) => void;
}) => {

const onChange = (e: any) => {
    if (changeSelect) {
        changeSelect(e);
    }
};
return (
    <>
        <Form.Item label="select1" name="select1" >
            <Select
                  placeholder="请选择"
                  style={{width: '200px'}}
                  allowClear
                  options={options1}
                  onChange={onChange}
                ></Select>
        </Form.Item>

        <Form.Item label="select2" name="select2">
            <Select
                  placeholder="请选择"
                  style={{width: '200px'}}
                  allowClear
                  options={options2}
            ></Select>
        </Form.Item>

    </>
);

};
//父组件
export const parent = () => {
 import {Son} from ‘./Son’
 const [select,setSelect] = useState();
  const onChangeSelect = (e: any) => {
    setSelect(e);
    form.setFieldValue(‘select2’, undefined);
  };
  return (
    <div>
      <div className="search">
        <div className="search-form">
          <Form form={form} layout="inline">
                <Son changeSelect={onChangeSelect}></Son>
                <Form.Item label="" name=""></Form.Item>
          </Form>
        </div>
      </div>
    </div>

  );
};