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

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

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

搜索 - Search 組件

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

1. action

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

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

2. value

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

value綁定的變量,通過onChange更新即可

3.點擊進行搜索

// 搜索關(guān)鍵詞
const onSearchClinic = async () => {
    // 前置校驗
    if (!searchName) {
      Toast('請輸入名稱關(guān)鍵字再進行搜索')
      return
    }
    // 開始搜索
    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 組件滾動到底部時,會觸發(fā) onLoad 事件,此時可以發(fā)起異步操作并更新數(shù)據(jù),若數(shù)據(jù)已全部加載完畢,則直接將 finished 設(shè)置成 true 即可。
react-vant - List 內(nèi)部包含了防止并發(fā)的重復請求的邏輯,使用中不需要額外處理

如果有分頁,則可以使用onLoad事件,項目中為全量返回,所以不需要這個。

選擇則某個診所之后進行反顯

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

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

占位組件 - Empty

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

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

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

其他小細節(jié)

點擊外層按鈕,喚起彈窗時自動聚焦到搜索輸入框

const searchRef = useRef<SearchInstance | any>(null)
// 顯示
const onShowClinicPop = () => {
    // do something 點擊前校驗,清空搜索關(guān)鍵詞 onClearClinic
    setShowClinicPop(true) // 彈窗
    setTimeout(() => {
      if (searchRef && searchRef.current) {
        searchRef.current?.focus() // 設(shè)置焦點
      }
    }, 0)
 }
// 關(guān)閉彈窗
const onCloseClinicPop = () => {
    if (searchRef && searchRef.current) {
      searchRef.current?.blur() // 設(shè)置焦點
    }
    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'
                ? '點擊搜索查找您的診所'
                : ''
          }
        />
      )}
    </div>
</Popup>

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

相關(guān)文章

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

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

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

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

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

    React中state屬性案例詳解

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

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

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

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

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

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

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

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

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

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

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

    React?Redux管理庫示例詳解

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

    React.cloneElement的使用詳解

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

最新評論