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>
</>
);
添加回答
舉報