亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

React with Ant Design - 如何在 <Form> 上的多個 <Select>

React with Ant Design - 如何在 <Form> 上的多個 <Select>

藍山帝景 2023-07-14 10:05:26
我是 ReactJS 和 AntDesign 的新手。我正在嘗試獲取一組組件<Select>來共享狀態,因此當您選擇第一個組件時,它會填充表單上下一個組件的選項,它必須是 a <Select>,我不能使用 a<Cascade>因為它會使 UI 變得復雜太多了(用戶對計算機不太熟悉)。這是我想要實現的示例,useEffect 上的數據將來自單個請求中的后端https://stackblitz.com/edit/react-xarwcj-sghpze?file=index.js選擇第一個選項后,我預計第二個下拉列表將填充子數組,但我得到的是一個空的下拉列表。我很確定該值已被設置,但由于我的一些配置錯誤,React 或 Ant 沒有重新渲染它,但我無法理解為什么。
查看完整描述

1 回答

?
倚天杖

TA貢獻1828條經驗 獲得超3個贊

如果您使用 antd,Form那么您必須將輸入元素包裝在Form.Item組件中。組件Form.Item有一個name道具。當您使用您提供的任何formInstance方法時,您可以引用給定的輸入組件。所以當你這樣做時,你實際上并沒有表單項,所以我認為這就是 antd 沒有設置它的值的原因。nameForm.ItemformInstance.setFieldsValue({ subList: value.list });subList


話雖如此,您的第二個選擇應該如下所示:


<Form.Item name="subList">

  <Select ... >

    {formInstance.getFieldValue("subList")?.map ... }

  </Select>

</Form.Item>

不要忘記首先包裝它Select,以及您的任何其他輸入組件Form。您賦予 的名稱Form.Item是您能夠讀取Form的onFinish方法中的值的方式。


有關此類用法的工作示例,您可以從 antd 表單文檔中查看此示例: https: //codesandbox.io/s/n1zdn。


formInstance.setFieldsValue({ subList: value.list });我應該提到,對我來說,當您在第一個Select中執行操作時似乎是錯誤的onChange(因為value是一個數字,所以value.list未定義),但我相信這是因為您提供的只是實際代碼的粗略、不完整的副本。但是,如果您在這個問題上遇到更多困難,請發表評論,我會盡力提供更多幫助!


編輯

為了回答您的評論,我設法確定的問題是,當從第一個選擇中選擇一個選項時,您將第二個選擇的值設置為array。您真正想要做的是設置第二個選擇的可用選項,而不是它的值。


因此,我建議的更改是讓您在狀態變量中設置第二個選擇的選項,如下所示:


const [list, setList] = useState([]);

const [secondList, setSecondList] = useState([]);


// ...


return (

    <>

      <Form form={formInstance}>

        <Form.Item>

          <Select

            style={{ width: 120 }}

            onSelect={value => {

              console.log(list.find(o => o.id === value).list);

              setSecondList(list.find(o => o.id === value).list);

            }}

          >

            {list.map(value => {

              return (

                <Option key={value.id} value={value.id}>

                  {value.name}

                </Option>

              );

            })}

          </Select>

        </Form.Item>


        <br />

        <br />


        <Form.Item name="subList">

          <Select

            style={{ width: 120 }}

            onChange={value => {

              console.log(value);

            }}

          >

            {secondList?.map(value => {

              return (

                <Option key={value.id} value={value.id}>

                  {value.desc}

                </Option>

              );

            })}

          </Select>

        </Form.Item>

      </Form>

    </>

  );



查看完整回答
反對 回復 2023-07-14
  • 1 回答
  • 0 關注
  • 450 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號