antd-mobile模糊搜索匹配的picker

可以搜索模糊匹配的picker,暂只支持一维数组。

import React, { useEffect, useState } from 'react'
import { Modal, Button, List ,PickerView, InputItem} from 'antd-mobile'
import { PickerData } from 'antd-mobile/lib/picker/PropsType';

interface Props{
  title:string;
  pickerData:PickerData[];
  value:string|number;
  onChange:(v:string|number)=> void;
  disabled?:boolean;
}

function SearchPicker(props:Props) {
  const [visible, setVisible] = useState(false)
  const [keyword,setKeyword] = useState('')
  const [tempValue,setTempValue] = useState('')

  const show =()=>{
    if(props.disabled){
      return
    }
    setVisible(true)
  }
  const close =()=>{
    setVisible(false)
    setKeyword("")
  }
  const submit=()=>{
    props.onChange(tempValue)
    close()
  }
  
  return (
    <>
       <List.Item arrow="horizontal" onClick={show} extra={props.pickerData?.find(v=>v.value===props.value)?.label||'请选择'}>{props.title||''}</List.Item>
       <Modal
          visible={visible}
          maskClosable={true}
          popup
          animationType="slide-up"
          title={props.title||''}
          onClose={close}
        >
          <div style={{display:"flex", justifyContent:"space-between"}}>
          <Button size='small' style={{width:70}} type='ghost' onClick={close}>取消</Button>
            <Button size='small' style={{width:70}} type='primary' onClick={submit}>确定</Button>
          </div>
          <InputItem placeholder='搜索' value={keyword} onChange={(e)=>{setKeyword(e) }} />
          <PickerView cols={1} data={props.pickerData.filter(v=>keyword?String(v.label).includes(keyword):true)} value={[tempValue]} onChange={(v)=>setTempValue(v?.[0]) } />
        </Modal>
    </>
   
  );
}

export default SearchPicker;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值