You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ReactJS如何实现动态select仅首个自动生成其余点击新增按钮生成

动态下拉选择器按需生成实现方案

需求要点

  • 初始仅自动渲染1个无新增按钮的下拉选择器(Select)
  • 所有额外的动态Select需点击新增按钮后才生成,不自动批量生成
  • 除首个Select外,其余所有动态生成的Select均配套显示新增按钮

完整实现代码

import React, { useState } from 'react';
import { Select, Button } from 'antd';
import 'antd/dist/antd.css';

const { Option } = Select;

// 下拉选项可根据业务需求替换为接口返回数据
const selectOptions = [
  { value: 'opt1', label: '选项1' },
  { value: 'opt2', label: '选项2' },
  { value: 'opt3', label: '选项3' },
];

export default function DynamicSelectGroup() {
  // 存储当前已生成的Select数量,初始值为1对应首个默认生成的Select
  const [selectNum, setSelectNum] = useState(1);

  // 点击新增按钮触发,新增一个Select
  const addSelectHandler = () => {
    setSelectNum(prevCount => prevCount + 1);
  };

  return (
    <div style={{ padding: '24px' }}>
      {Array.from({ length: selectNum }).map((_, index) => (
        <div key={index} style={{ marginBottom: '12px', display: 'flex', gap: '8px', alignItems: 'center' }}>
          <Select
            style={{ width: '220px' }}
            placeholder={`请选择第${index + 1}项`}
          >
            {selectOptions.map(item => (
              <Option key={item.value} value={item.value}>
                {item.label}
              </Option>
            ))}
          </Select>
          {/* 非首个Select显示新增按钮,可根据需求调整是否保留所有新增按钮或仅最后一个显示 */}
          {index !== 0 && <Button type="primary" onClick={addSelectHandler}>新增</Button>}
        </div>
      ))}
      {/* 首个Select对应的新增按钮放在列表末尾,避免首个Select旁出现按钮 */}
      {selectNum === 1 && <Button type="primary" onClick={addSelectHandler}>新增</Button>}
    </div>
  );
}

逻辑说明

  • 初始化时仅渲染1个默认Select,无多余元素生成
  • 首次点击新增按钮后生成第二个Select,该Select自带新增按钮
  • 后续所有新增的Select都会自带新增按钮,点击任意新增按钮都可生成下一个Select
  • 可自行扩展删除、数据绑定、联动选择等业务功能

内容的提问来源于stack exchange,提问作者Giovanny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 03:36:03