本文基于antd组件库3.x版本的组件form以及select展开

论,如何把二级级联选择封成一个适合放进form.item里用的组件

我自己写的⬇️

  1. import { useRequest } from 'ahooks';
  2. import { Select } from 'antd';
  3. import React, { useState } from 'react';
  4. import styles from './index.module.scss';
  5. interface CascadeSelectProps {
  6. value: any[];
  7. onChange: (e: any[]) => void;
  8. options: {
  9. disabled: boolean;
  10. };
  11. }
  12. function CascadeSelect(props: CascadeSelectProps) {
  13. const { value, options, onChange } = props;
  14. const { data: governArchData = {} } = useRequest<any>(API.datagoverncore.governArch.postGetGovernArch.request);
  15. const [cascadeValue, setCascadeValue] = useState<any[]>(value);
  16. const [secondData, setSecondData] = useState<any[]>([]);
  17. return (
  18. <div className={styles['cascade-select']}>
  19. <Select
  20. className={styles['cascade-select-item']}
  21. allowClear
  22. placeholder="xxx"
  23. showArrow={true}
  24. showSearch
  25. disabled={options.disabled}
  26. onChange={e => {
  27. setSecondData(governArchData[String(e)]);
  28. setCascadeValue([e, undefined]);
  29. onChange([e, undefined]);
  30. }}
  31. >
  32. {Object.keys(governArchData)?.map(item => (
  33. <Select.Option key={item} value={item}>
  34. {item}
  35. </Select.Option>
  36. ))}
  37. </Select>
  38. <Select
  39. className={styles['cascade-select-item']}
  40. value={cascadeValue[1]}
  41. allowClear
  42. placeholder="xxx"
  43. showArrow={true}
  44. showSearch
  45. disabled={options.disabled}
  46. onChange={e => {
  47. setCascadeValue([cascadeValue[0], e]);
  48. onChange([cascadeValue[0], e]);
  49. }}
  50. >
  51. {secondData?.map((item: any) => (
  52. <Select.Option key={item?.id} value={item?.id}>
  53. {item?.cat2Name}
  54. </Select.Option>
  55. ))}
  56. </Select>
  57. </div>
  58. );
  59. }
  60. export default CascadeSelect;

如何在父组件中使用⬇️

<CascadeSelect
  value={cascadeValue}
  onChange={e => {
    props.form.setFieldsValue({ business: e });
  }}
  options={{
    disabled,
  }}
/>

基本上就是,传一个总的值进去,这里设定成[undefined, undefined],然后change就调用函数修改

  1. 组件自身的value
  2. form里面的value(子传父用onChange修改