【React】Antd Select选择器多选设置最多只能选3个

文章介绍了在AntDesign(Antd)3X和4X版本中,如何限制Select组件在多选模式下最多只能选择3个选项的三种方法。方案1使用`setFieldsValue`在4X版本有效,3X版本无效;方案2利用`pop()`方法动态移除超出的选项;方案3通过`validator`在rules中进行验证并控制选择项数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

应用场景描述:Antd3X版本,想要实现form中的 Select 多选最多只能选3个。

1、方案1:setFieldsValue(适用Antd4X版本)

起初是想在Select的onchange事件中判断values的数量,数量大于三个的时候来重新setFieldsValue。

后来发现在Antd3X版本中 setFieldsValue方法不起作用,Select的值还是会一直增加。

但是试了Antd4X版本,这种方案是可行的,代码如下:

import { Form, message, Select } from 'antd';
import React from 'react';
import _ from 'lodash'

const { Option } = Select;

const App = () => {
  const [form] = Form.useForm();

  const handleChange = (value) => {
    if (value.length > 3) {
      message.error('已超过最大数量');
      form.setFieldsValue({
        "list": _.take(value, 3),
      })
    }
  };

  return (
    <Form form={form}>
      <Form.Item
        name="list"
        label="多选:(最多选3个)"
        rules={[{
          required: true
        }]}
      >
        <Select
          mode="multiple"
          placeholder="请选择"
          onChange={handleChange}
        >
          <Option value="111">111</Option>
          <Option value="222">222</Option>
          <Option value="333">333</Option>
          <Option value="444">444</Option>
        </Select>
      </Form.Item>
    </Form>
  );
};

export default App;

2、方案2:pop(适用Antd3X、4X版本)

再后来看到这个文章:https://blog.youkuaiyun.com/m0_45219210/article/details/128573600

亲测好用,方法如下:就是在 onChange 事件中判断选中值的数量,如果大于3,则调用 pop() 方法。

代码如下:

const handleChange = (value) => {
  if (value.length > 3) {
    message.error('已超过最大数量');
    value.pop();
  }
};

3、方案3:validator(适用Antd3X版本)

参考文章:https://www.bbsmax.com/A/q4zVEqDGdK/

把Select标签上的onChange去掉,然后在 rules 中添加 validator 【它是自定义校验(3X版本中注意,callback 必须被调用,4X版本略有不同)】

代码如下:

import { Form, message, Select } from 'antd';
import React from 'react';
import _ from 'lodash'

const { Option } = Select;

const App = () => {
  const [form] = Form.useForm();

  const handleChange = (rule, value, callback) => {
    if (value.length > 3) {
      message.error('已超过最大数量');
      form.setFieldsValue({
        "list": _.take(value, 3),
      })
      callback('已超过最大数量...')
    } else {
      callback()
    }
  };


  return (
    <Form form={form}>
      <Form.Item
        name="list"
        label="多选:(最多选3个)"
        rules={[{
          required: true,
          validator: handleChange
        }]}
      >
        <Select
          mode="multiple"
          placeholder="请选择"
        >
          <Option value="111">111</Option>
          <Option value="222">222</Option>
          <Option value="333">333</Option>
          <Option value="444">444</Option>
        </Select>
      </Form.Item>
    </Form>
  );
};

export default App;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值