我有一个表单,其中有一个多选下拉 antd 组件。 在更改全选选项时,我需要选择最多 5 个标签的所有可用选项。
请在此处的codesandbox中找到我的代码的链接 https://codesandbox.io/s/summer-wind-1swto
最大标签为 5,通过在选择选项时调用 handleSelectAll 函数来指定
<Form.Item label= 'Column Names'>
{getFieldDecorator(`columnNames`, {
validateTrigger: ['onChange', 'onBlur'],
rules: [
{
required: true,
message: "Please input the Column Names!",
},
],
})(
<Select
mode="multiple"
placeholder="Please select Columns"
maxTagCount={5}
onChange={this.handleSelectAll}
>
<Option key="all" value="all">---SELECT ALL---</Option>
{children}
</Select>
)}
</Form.Item>
预期:
On select all is clicked all the options to be selected
On unchecking it all options to be removed
就您而言,
setFieldsValue
不起作用。但你可以使用getValueFromEvent
。
handleSelectAll = (value) => {
if (value && value.length && value.includes("all")) {
if (value.length === all.length + 1) {
return [];
}
return [...all];
}
return value;
}
<Form.Item label='Column Names'>
{getFieldDecorator(`columnNames`, {
validateTrigger: ['onChange', 'onBlur'],
getValueFromEvent: this.handleSelectAll,
rules: [
{
required: true,
message: "Please input the Column Names!",
},
],
})(
<Select
mode="multiple"
placeholder="Please select Columns"
maxTagCount={5}
onChange={this.handleSelectAll}
>
<Option key="all" value="all">---SELECT ALL---</Option>
{children}
</Select>
)}
</Form.Item>
这会起作用。
handleSelectAll
事件返回使用 getValueFromEvent
分配的值并初始化选择组件。
在 4.x 版本上。 我认为你应该在 form.setFieldsValue({
nameOfFormItem: valueSelected
}} 上设置值
我更喜欢使用
dropdownRender
方法而不是 getFieldDecorator
const handleSelectAllClick = () => {
form.setFieldValue(
"items",
myOptions.map(({value}) => value)
);
form.validateFields(["items"]);
}
<Form.Item name="items">
<Select
mode="multiple"
allowClear
showArrow
maxTagCount="responsive"
options={myOptions}
dropdownRender={(menu) => (
<>
{menu}
<Divider />
<div>
<Button
type="text"
className="w-100"
shape="round"
onClick={handleSelectAllClick}
>
Select All
</Button>
</div>
</>
)}
/>
</Form.Item>