欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于react?vant實(shí)現(xiàn)彈窗搜索功能

 更新時(shí)間:2025年01月24日 08:31:14   作者:某哈壓力大  
這篇文章主要為大家詳細(xì)介紹了如何基于react?vant實(shí)現(xiàn)彈窗搜索功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

搜索 - Search 組件

彈出層的頂部用到了Search組件

1. action

Search組件中需要自定義右側(cè)的按鈕,可以使用showAction(默認(rèn)文字為取消)+ actionText自定義按鈕文字;也可以使用action自定義右邊部分操作區(qū)域
官網(wǎng)文檔使用方法1:

<Search
  showAction
  label="地址"
  actionText={<div onClick={() => Toast.info(value)}>搜索</div>}
  value={value}
  onChange={setValue}
  placeholder="請(qǐng)輸入搜索關(guān)鍵詞"
/>

2. value

value 用于控制搜索框中的文字

value綁定的變量,通過(guò)onChange更新即可

3.點(diǎn)擊進(jìn)行搜索

// 搜索關(guān)鍵詞
const onSearchClinic = async () => {
    // 前置校驗(yàn)
    if (!searchName) {
      Toast('請(qǐng)輸入名稱關(guān)鍵字再進(jìn)行搜索')
      return
    }
    // 開(kāi)始搜索
    try {
      setSearchLoading('loading')
      const {
        data: { rows },
      } = await triggerClinicList()
      const _rows = [...rows].map((item) => ({
        ...item,
        value: item.code,
        text: item.name,
      }))
      setClinicList(_rows)
      setSearchLoading('sucess')
    } catch (error) {
      setSearchLoading('sucess')
    }
}

數(shù)據(jù)列表 - List 組件

List 組件滾動(dòng)到底部時(shí),會(huì)觸發(fā) onLoad 事件,此時(shí)可以發(fā)起異步操作并更新數(shù)據(jù),若數(shù)據(jù)已全部加載完畢,則直接將 finished 設(shè)置成 true 即可。
react-vant - List 內(nèi)部包含了防止并發(fā)的重復(fù)請(qǐng)求的邏輯,使用中不需要額外處理

如果有分頁(yè),則可以使用onLoad事件,項(xiàng)目中為全量返回,所以不需要這個(gè)。

選擇則某個(gè)診所之后進(jìn)行反顯

搜索的字段和外層最終反顯的字段分為兩個(gè)記錄,關(guān)閉的時(shí)候或者每次打開(kāi)的時(shí)候要清除內(nèi)部的字段(看業(yè)務(wù)要求)

const [clinicName, setClinicName] = useState('') // 外層業(yè)務(wù)字段
  const [searchName, setSearchName] = useState('') // 彈窗記錄搜索的關(guān)鍵字
// 點(diǎn)擊cell,進(jìn)行選擇
const setClinicHandle = (v: any) => {
    // 更新外層輸入框名稱
    // 關(guān)閉彈窗
    onCloseClinicPop()
}

占位組件 - Empty

占位組件的圖片有兩個(gè)狀態(tài):1.圖片顯示 2. loading顯示

占位組件的文案有兩個(gè)狀態(tài):1.初始化時(shí)的搜索提醒 2. 搜索結(jié)果為空時(shí)的提醒

  // loading -- 加載中,wait -- 初始化, sucess -- 搜索完成(不論結(jié)果如何)
  const [searchLoading, setSearchLoading] = useState<'wait' | 'loading' | 'sucess'>('wait')

其他小細(xì)節(jié)

點(diǎn)擊外層按鈕,喚起彈窗時(shí)自動(dòng)聚焦到搜索輸入框

const searchRef = useRef<SearchInstance | any>(null)
// 顯示
const onShowClinicPop = () => {
    // do something 點(diǎn)擊前校驗(yàn),清空搜索關(guān)鍵詞 onClearClinic
    setShowClinicPop(true) // 彈窗
    setTimeout(() => {
      if (searchRef && searchRef.current) {
        searchRef.current?.focus() // 設(shè)置焦點(diǎn)
      }
    }, 0)
 }
// 關(guān)閉彈窗
const onCloseClinicPop = () => {
    if (searchRef && searchRef.current) {
      searchRef.current?.blur() // 設(shè)置焦點(diǎn)
    }
    setShowClinicPop(false)
}

部分代碼如下

<Popup
position="bottom"
round={true}
visible={showClinicPop}
onClose={onCloseClinicPop}
style={{ height: '60vh' }}
>
    <div className="popup-header">
      <VantButton
        style={{
          border: 'none',
          boxShadow: 'none',
          backgroundColor: 'transparent',
          color: 'inherit',
        }}
        icon={<Cross />}
        onClick={onCloseClinicPop}
      />
    </div>
    <Search
      action={
        <div
          className="search-text"
          onClick={onSearchClinic}
        >
          搜索
        </div>
      }
      value={searchName}
      onChange={(v) => {
        setSearchName(v)
      }}
      placeholder="輸入名稱關(guān)鍵字"
      onSearch={onSearchClinic}
      onClear={onClearClinic}
      ref={searchRef}
    />
    <div style={{ height: 'calc(60vh - 98px)', overflowY: 'auto' }}>
      {clinicList?.length > 0 ? (
        <List
          onLoad={() => new Promise(() => {})}
          finished={true}
        >
          {clinicList.map((item, index) => (
            <Cell
              key={index}
              value={item.text}
              isLink
              arrowDirection="right"
              valueClass="text-[#323232]"
              onClick={() => {
                setClinicHandle(item.code)
              }}
            />
          ))}
        </List>
      ) : (
        <Empty
          image={
            searchLoading === 'loading' ? (
              <div className="empty-loading">
                <Loading type="ball" />
              </div>
            ) : (
              'search'
            )
          }
          description={
            searchLoading === 'sucess'
              ? '搜索列表為空'
              : searchLoading === 'wait'
                ? '點(diǎn)擊搜索查找您的診所'
                : ''
          }
        />
      )}
    </div>
</Popup>

到此這篇關(guān)于基于react vant實(shí)現(xiàn)彈窗搜索功能的文章就介紹到這了,更多相關(guān)react vant彈窗搜索內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • React三大屬性之Refs的使用詳解

    React三大屬性之Refs的使用詳解

    這篇文章主要介紹了React三大屬性之Refs的使用詳解,幫助大家更好的理解和學(xué)習(xí)使用React,感興趣的朋友可以了解下
    2021-04-04
  • React實(shí)現(xiàn)反向代理和修改打包后的目錄

    React實(shí)現(xiàn)反向代理和修改打包后的目錄

    這篇文章主要介紹了React實(shí)現(xiàn)反向代理和修改打包后的目錄方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • React中state屬性案例詳解

    React中state屬性案例詳解

    在React中,state 是一個(gè)用于存儲(chǔ)組件內(nèi)部數(shù)據(jù)的特殊對(duì)象,每個(gè)React組件都可以包含自己的state,我們往往是通過(guò)修改state的值來(lái)驅(qū)動(dòng)React重新渲染組件,這篇文章主要介紹了React中state屬性,需要的朋友可以參考下
    2023-11-11
  • React組件實(shí)例三大核心屬性State props Refs詳解

    React組件實(shí)例三大核心屬性State props Refs詳解

    組件實(shí)例的三大核心屬性是:State、Props、Refs。類組件中這三大屬性都存在。函數(shù)式組件中訪問(wèn)不到 this,也就不存在組件實(shí)例這種說(shuō)法,但由于它的特殊性(函數(shù)可以接收參數(shù)),所以存在Props這種屬性
    2022-12-12
  • 路由react-router-dom的基本使用教程

    路由react-router-dom的基本使用教程

    在React中,路由是一套映射規(guī)則,是URL路徑與組件的對(duì)應(yīng)關(guān)系。使用React路由,就是配置路徑和組件的對(duì)應(yīng)關(guān)系,這篇文章主要介紹了路由react-router-dom的使用,需要的朋友可以參考下
    2023-02-02
  • 淺談React前后端同構(gòu)防止重復(fù)渲染

    淺談React前后端同構(gòu)防止重復(fù)渲染

    這篇文章主要介紹了淺談React前后端同構(gòu)防止重復(fù)渲染,首先解釋React前后端同構(gòu)、React首屏渲染的概念。然后通過(guò)這2個(gè)概念解決服務(wù)端渲染完成后瀏覽器端重復(fù)渲染的問(wèn)題。有興趣的可以了解一下
    2018-01-01
  • React觸發(fā)render的實(shí)現(xiàn)方法

    React觸發(fā)render的實(shí)現(xiàn)方法

    這篇文章主要介紹了React觸發(fā)render的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • 從零搭建Webpack5-react腳手架的實(shí)現(xiàn)步驟(附源碼)

    從零搭建Webpack5-react腳手架的實(shí)現(xiàn)步驟(附源碼)

    本文主要介紹了從零搭建Webpack5-react腳手架的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • React?Redux管理庫(kù)示例詳解

    React?Redux管理庫(kù)示例詳解

    這篇文章主要介紹了如何在React中直接使用Redux,目前redux在react中使用是最多的,所以我們需要將之前編寫的redux代碼,融入到react當(dāng)中去,本文給大家詳細(xì)講解,需要的朋友可以參考下
    2022-12-12
  • React.cloneElement的使用詳解

    React.cloneElement的使用詳解

    這篇文章主要介紹了React.cloneElement的使用詳解,幫助大家更好的理解和學(xué)習(xí)使用React框架,感興趣的朋友可以了解下
    2021-04-04

最新評(píng)論