前言:为什么不直接用select,还要舍近求远搞input+dropdown这种缝合怪,是因为antd的select不支持选中项再编辑,效果如图
比如:选中的lucy文案变成了placeholder不能再编辑了
封装此组件虽然比较简单,但还是有弊端的,就是失去了select自带的上下键选中下拉项的功能
一、组件代码
import React, { useState, useRef, useEffect } from 'react';
import { Dropdown, Menu, Input } from 'antd';
import { DownOutlined } from '@ant-design/icons'; const CustomSelect = (props) => { //可用props参数将方法抛出去供外部父组件使用const {pressEnter} = props;//例如:抛出回车事件const [value, setValue] = useState(''); const [options, setOptions] = useState(['洋芋果果', '测试1号', '测试2号']); const [open, setOpen] = useState(false); // 下拉菜单隐藏可见 const handleDropdown = (flag) => { setOpen(flag); }; //选中下拉项const handleMenu = (item,key)=>{setValue(item.props.label);setOpen(false);} return ( <Dropdown overlay={<MenuonClick={handleMenu} >{options.map((option, index) => ( <Menu.Item key={option}> {option} </Menu.Item> ))}</Menu>} trigger={['click']} visible={open} onVisibleChange={handleDropdown} getPopupContainer={() => dropdownRef.current} > <Input value={value} placeholder="请选择" suffix={<DownOutlined />} onChange={(e)=>{ setValue(e.target.value);}}onPressEnter={pressEnter}/> </Dropdown> ); }; export default CustomSelect;
二、调用组件
import React from 'react';
import CustomSelect from './CustomSelect'; // 导入自定义下拉组件 const App = () => { return ( <div> <CustomSelect pressEnter={(e)=>{console.log(e,"回调参数")}}/> </div> ); }; export default App;