在 ANTD React 中使用全选选项进行多选

问题描述 投票:0回答:3

我有一个表单,其中有一个多选下拉 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
reactjs multi-select antd
3个回答
8
投票

就您而言,

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
分配的值并初始化选择组件。


0
投票

在 4.x 版本上。 我认为你应该在 form.setFieldsValue({

nameOfFormItem: valueSelected
}}

上设置值

0
投票

我更喜欢使用

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>
© www.soinside.com 2019 - 2024. All rights reserved.