import { Popup, SearchBar, PickerView, Button } from 'antd-mobile'; import { List,} from 'antd-mobile-v2'; import { useState, useMemo } from 'react'; import styles from "./selectInput.less"; export default function SearchablePicker(props) { console.log("🚀 ~ SearchablePicker ~ props:", props) const { onConfirm, initialValue, data, sTitle, onChange, value:newValue } = props; const [searchValue, setSearchValue] = useState(''); const [visible, setVisible] = useState(false) // 安全初始化 values const initialVal = useMemo(() => { if (!initialValue || !Array.isArray(data)) return []; const exists = data.some(item => item?.value === initialValue); return exists ? [initialValue] : []; }, [initialValue, data]); const [values, setValues] = useState(initialVal); // 安全过滤选项 const filteredOptions = useMemo(() => { const options = Array.isArray(data) ? data : []; if (!searchValue.trim()) { return options; } return options.filter(item => item && typeof item.label === 'string' && item.label.toLowerCase().includes(searchValue.toLowerCase()) ); }, [searchValue, data]); // ✅ 必须包含 data const label = filteredOptions?.find(x=>x.value === newValue[0])?.label || '' const handleConfirm = () => { onChange(values); setVisible(false); }; const handleCancel = () => { setVisible(false); }; const changeOption = (val) => { setValues(val); }; return (
{ setVisible(true) }} extra={label}> {props.iconSettingShow ? // eslint-disable-next-line jsx-a11y/alt-text : ''} {sTitle}
); }