最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間: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="請輸入搜索關(guān)鍵詞"
/>

2. value

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

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

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

// 搜索關(guān)鍵詞
const onSearchClinic = async () => {
    // 前置校驗(yàn)
    if (!searchName) {
      Toast('請輸入名稱關(guān)鍵字再進(jì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ā)的重復(fù)請求的邏輯,使用中不需要額外處理

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

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

搜索的字段和外層最終反顯的字段分為兩個記錄,關(guān)閉的時候或者每次打開的時候要清除內(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

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

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

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

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

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

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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • React Query + REST API 最佳實(shí)踐

    React Query + REST API 最佳實(shí)踐

    本文介紹了如何利用React Query構(gòu)建React應(yīng)用的REST API數(shù)據(jù)層,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-06-06
  • 搭建React?Native熱更新平臺的詳細(xì)過程

    搭建React?Native熱更新平臺的詳細(xì)過程

    這篇文章主要介紹了搭建React?Native熱更新平臺,要實(shí)現(xiàn)?React?Native?熱更新功能,有四種思路?Code?Push、Pushy、Expo?和自研,感興趣的朋友一起通過本文學(xué)習(xí)吧
    2022-05-05
  • React復(fù)制到剪貼板的示例代碼

    React復(fù)制到剪貼板的示例代碼

    本篇文章主要介紹了React復(fù)制到剪貼板的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • React18之狀態(tài)批處理的使用

    React18之狀態(tài)批處理的使用

    本文主要介紹了React18之狀態(tài)批處理的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • React父子組件傳值(組件通信)的實(shí)現(xiàn)方法

    React父子組件傳值(組件通信)的實(shí)現(xiàn)方法

    本文主要介紹了React父子組件傳值(組件通信)的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • React Hook用法示例詳解(6個常見hook)

    React Hook用法示例詳解(6個常見hook)

    這篇文章主要介紹了React Hook用法詳解(6個常見hook),本文通過實(shí)例代碼給大家介紹了6個常見hook,需要的朋友可以參考下
    2021-04-04
  • react koa rematch 如何打造一套服務(wù)端渲染架子

    react koa rematch 如何打造一套服務(wù)端渲染架子

    這篇文章主要介紹了react koa rematch 如何打造一套服務(wù)端渲染架子,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • 詳解React之key的使用和實(shí)踐

    詳解React之key的使用和實(shí)踐

    這篇文章主要介紹了詳解React之key的使用和實(shí)踐,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • react-native彈窗封裝的方法

    react-native彈窗封裝的方法

    這篇文章主要為大家詳細(xì)介紹了react-native彈窗封裝的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • react項目使用redux初始化方式

    react項目使用redux初始化方式

    這篇文章主要介紹了react項目使用redux初始化方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01

最新評論

蕲春县| 梓潼县| 南乐县| 广南县| 泽州县| 佛坪县| 搜索| 延庆县| 濮阳市| 黔西县| 临夏市| 崇文区| 镇赉县| 治多县| 兴仁县| 灌南县| 无为县| 盐池县| 勃利县| 武宣县| 邹平县| 灵璧县| 龙川县| 内黄县| 海宁市| 神木县| 石河子市| 大埔区| 新源县| 凤台县| 固始县| 托里县| 临夏县| 泸州市| 中江县| 太白县| 岑溪市| 炎陵县| 赤壁市| 富川| 津市市|