精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

使用Fuse.js將動態搜索添加到React應用

移動開發 Android
Fuse.js是一個輕量級的搜索引擎,可以在用戶的瀏覽器中的客戶端運行。讓我們看看如何使用它來輕松地為React應用添加搜索功能。

Fuse.js是一個輕量級的搜索引擎,可以在用戶的瀏覽器中的客戶端運行。讓我們看看如何使用它來輕松地為React應用添加搜索功能。

[[402547]]

何時使用Fuse.js

搜索功能對很多類型的網站都很有用,可以讓用戶高效地找到他們想要的東西。但為什么我們會專門選擇使用Fuse.js呢?

為搜索提供動力的選擇有很多,最簡單的可能是使用現有的數據庫。例如,Postgres有一個全文搜索功能。MySQL也有,Redis也有RediSearch模塊。

還有一些專門的搜索引擎,其中Elasticsearch和Solr是最受歡迎的。這些搜索引擎需要更多的設置,但它們擁有你的用例可能需要的高級功能。

最后,你可以使用Algolia或Swiftype等搜索即服務平臺。這些服務運行自己的搜索基礎架構。你只需通過API提供數據、配置和查詢。

但是,您可能不需要這些解決方案所暴露的能力,這可能需要大量的工作來實現,更不用說成本了。如果沒有太多的數據需要搜索,Fuse.js需要最小的設置,并且可以提供比您自己可能想到的更好的搜索體驗。

至于多少數據對Fuse.js來說是過多的,考慮到Fuse.js需要訪問整個數據集,所以你需要在客戶端全部加載。如果數據集的大小是100MB,那就超出了發送給客戶端的合理范圍。但如果它只有幾千字節,它可能是Fuse.js的一個很好的候選者。

構建一個Fuse.js + React演示應用程序

讓我們做一個基本的React應用,使用Fuse.js讓用戶搜索狗的品種。你可以在這里查看最終的結果,源代碼可以在GitHub上找到。

我們將從設置一些腳手架開始。從一個新的Node.js項目開始,我們將安裝React和Fuse.js:

  1. npm install --save react react-dom fuse.js 
  2. //or 
  3. yarn add react react-dom fuse.js 

我們還將安裝Parcel作為開發依賴項:

  1. npm install --save-dev parcel@2.0.0-beta.1 
  2. //or 
  3. yarn add --dev parcel@2.0.0-beta.1 

我們將在 package.json 啟動腳本中使用它來編譯應用程序:

  1. {   
  2.   "scripts": { 
  3.     "start": "parcel serve ./index.html --open" 
  4.   } 

接下來,我們將創建一個barebones index.html,其中包含一個空的 div 供React渲染,以及一個 noscript 消息,以避免在用戶禁用JavaScript時出現空白頁面。

  1. <!DOCTYPE html> 
  2. <html lang="en"> 
  3.   <body> 
  4.     <div id="app"></div> 
  5.     <noscript> 
  6.       <p>Please enable JavaScript to view this page.</p> 
  7.     </noscript> 
  8.     <script src="./index.js"></script> 
  9.   </body> 
  10. </html> 

我們將使我們的 index.js 簡單的開始。我們將渲染一個有搜索查詢輸入的表單,盡管我們還不會實際處理搜索。

  1. import React, { useState } from "react"; 
  2. import ReactDom from "react-dom"; 
  3.  
  4. function Search() { 
  5.   return ( 
  6.     <form> 
  7.       <label htmlFor="query">Search for a dog breed:</label> 
  8.       <input type="search" id="query" /> 
  9.       <button>Search</button> 
  10.     </form> 
  11.   ); 
  12.  
  13. ReactDom.render(<Search />, document.getElementById("app")); 

此時,如果你運行 npm run start 或 yarn run start,Parcel應該會在瀏覽器中打開網站,你應該會看到這個表單。

實施搜索

現在開始實施搜索,我們將從顯示搜索結果的組件開始。我們需要處理三種情況:

  • 用戶尚未執行搜索時
  • 沒有查詢結果時(因為我們不希望用戶認為某些問題)
  • 什么時候有結果顯示

我們將在ordered list中顯示所有結果。

  1. function SearchResults(props) { 
  2.   if (!props.results) { 
  3.     return null; 
  4.   } 
  5.  
  6.   if (!props.results.length) { 
  7.     return <p>There are no results for your query.</p>
  8.   } 
  9.  
  10.   return ( 
  11.     <ol> 
  12.       {props.results.map((result) => ( 
  13.         <li key={result}>{result}</li> 
  14.       ))} 
  15.     </ol> 
  16.   ); 

我們也來編寫自己的搜索函數。稍后,我們將能夠將我們的簡單方法的結果與Fuse.js的結果進行比較。

我們的方法很簡單:我們將遍歷犬種數組(來自這個JSON列表),并返回包含整個搜索查詢的所有犬種。我們還會讓所有東西都小寫,這樣搜索就不區分大小寫了。

  1. const dogs = [ 
  2.   "Affenpinscher", 
  3.   "Afghan Hound", 
  4.   "Aidi", 
  5.   "Airedale Terrier", 
  6.   "Akbash Dog", 
  7.   "Akita", 
  8.   // More breeds.. 
  9. ]; 
  10.  
  11. function searchWithBasicApproach(query) { 
  12.   if (!query) { 
  13.     return []; 
  14.   } 
  15.  
  16.   return dogs.filter((dog) => dog.toLowerCase().includes(query.toLowerCase())); 

接下來,讓我們將所有內容鏈接在一起,方法是從表單提交中獲取搜索查詢,然后執行搜索并顯示結果。

  1. function Search() { 
  2.   const [searchResults, setSearchResults] = useState(null); 
  3.  
  4.   return ( 
  5.     <> 
  6.       <form 
  7.         onSubmit={(event) => { 
  8.           event.preventDefault(); 
  9.           const query = event.target.elements.query.value; 
  10.           const results = searchWithBasicApproach(query); 
  11.           setSearchResults(results); 
  12.         }} 
  13.       > 
  14.         <label htmlFor="query">Search for a dog breed:</label> 
  15.         <input type="search" id="query" /> 
  16.         <button>Search</button> 
  17.       </form> 
  18.  
  19.       <SearchResults results={searchResults} /> 
  20.     </> 
  21.   ); 

添加Fuse.js

使用Fuse.js很簡單,我們需要導入它,讓它使用 new Fuse() 對數據進行索引,然后使用索引的搜索功能。搜索會返回一些元數據,所以我們將只提取實際的項目進行展示。

  1. import Fuse from "fuse.js"; 
  2.  
  3. const fuse = new Fuse(dogs); 
  4.  
  5. function searchWithFuse(query) { 
  6.   if (!query) { 
  7.     return []; 
  8.   } 
  9.  
  10.   return fuse.search(query).map((result) => result.item); 

元數據包括一個 refIndex 整數,讓我們可以回溯到原始數據集中的相應項目。如果我們用 new Fuse(dogs, {includeScore: true}) 初始化索引,我們也會得到匹配分數:一個介于0和1之間的值,其中0是完全匹配。那么“Husky”的搜索結果就會像這樣:

  1.   { 
  2.     item: "Siberian Husky", 
  3.     refIndex: 386, 
  4.     score: 0.18224241177399383 
  5.   } 

我們將在 Search 組件的表單中添加一個復選框,讓用戶選擇是否使用Fuse.js而不是基本的搜索函數。

  1. <form 
  2.   onSubmit={(event) => { 
  3.     event.preventDefault(); 
  4.     const query = event.target.elements.query.value; 
  5.     const useFuse = event.target.elements.fuse.checked; 
  6.     setSearchResults( 
  7.       useFuse ? searchWithFuse(query) : searchWithBasicApproach(query) 
  8.     ); 
  9.   }} 
  10. > 
  11.   <label htmlFor="query">Search for a dog breed: </label> 
  12.   <input type="search" id="query" /> 
  13.   <input type="checkbox" name="fuse" /> 
  14.   <label htmlFor="fuse"> Use Fuse.js</label> 
  15.   <button>Search</button> 
  16. </form> 

現在我們可以用Fuse.js進行搜索了!我們可以使用復選框來比較使用它和不使用它。

最大的區別在于Fuse.js可以容忍錯別字(通過近似字符串匹配),而我們的基本搜索則需要精確匹配。如果我們把“retriever”拼錯為“retreiver”,請查看基本搜索結果。

以下是針對同一查詢更有用的Fuse.js結果:

搜索多個字段

如果我們關心多個字段,我們的搜索可能會更復雜。例如,想象一下,我們想通過品種和原產國來搜索。Fuse.js支持這種用例。當我們創建索引時,我們可以指定要索引的對象鍵。

  1. const dogs = [ 
  2.   {breed: "Affenpinscher", origin: "Germany"}, 
  3.   {breed: "Afghan Hound", origin: "Afghanistan"}, 
  4.   // More breeds.. 
  5. ]; 
  6.  
  7. const fuse = new Fuse(dogs, {keys: ["breed", "origin"]}); 

現在,Fuse.js將同時搜索 breed 和 origin 字段。

總結

有時候,我們不想花費資源去建立一個完整的Elasticsearch實例。當我們有簡單的需求時,Fuse.js可以提供相應的簡單解決方案。而正如我們所看到的,將它與React一起使用也是很簡單的。

即使我們需要更高級的功能,Fuse.js也允許給不同的字段賦予不同的權重,添加 AND 和 OR 邏輯,調整模糊匹配邏輯等等。當你下次需要在應用中添加搜索功能時,可以考慮使用它。

責任編輯:趙寧寧 來源: 今日頭條
相關推薦

2022-03-14 08:54:04

NetlifyHTMLReact

2021-05-26 14:39:27

FedoraLinux企業域

2011-11-15 14:52:39

Mac OSWindows域

2019-04-17 14:32:39

加密文件Windows 10搜索結果

2011-07-18 10:32:39

域控制器

2017-05-09 14:00:00

SambaWinbindUbuntu

2018-10-15 09:30:11

ChromeYouTubeLinux

2020-02-11 12:54:34

Linux日志文件消息

2011-07-27 17:45:29

iPhone 模擬器 圖片

2020-11-17 11:18:31

Docker

2023-05-24 10:04:36

微軟ChatGPT人工智能

2021-06-15 05:45:56

Linkerd annotations網絡技術

2022-06-10 09:29:42

蘋果刪除原生系統

2019-03-06 15:02:56

應用程序Windows 10 右鍵單擊菜單

2023-06-08 15:17:13

iOSChatGPT

2019-11-07 09:20:36

Windows 10聯系人Outlook

2023-11-14 22:16:36

2010-08-31 15:14:55

DB2域賬戶

2015-12-01 09:23:14

Windows 10開始菜單網站

2021-01-07 15:54:19

谷歌iOS應用蘋果
點贊
收藏

51CTO技術棧公眾號

亚洲婷婷在线视频| 久久亚洲精品伦理| 精品sm捆绑视频| 噜噜噜久久亚洲精品国产品麻豆 | 亚洲美女毛片| 亚洲色图综合久久| 黄色一级片免费播放| 国产在线拍揄自揄拍视频| 99精品视频一区二区三区| 国产精品露脸自拍| 国产中文字幕免费| 成人羞羞在线观看网站| 精品国产1区二区| 中文字幕av专区| 538视频在线| 国产精品妹子av| 久草一区二区| 精品美女www爽爽爽视频| 国产精品久久国产愉拍| 久久天天躁狠狠躁夜夜爽蜜月| 影音先锋黄色资源| 亚洲精品777| 日韩欧美精品免费在线| 黄色小视频大全| 国产精品二线| 99久久国产免费看| 51国偷自产一区二区三区的来源| 无码人妻一区二区三区免费| 中国精品18videos性欧美| 国产午夜精品视频| 折磨小男生性器羞耻的故事| 欧美在线se| 91精品1区2区| 日韩在线视频在线观看| 91福利国产在线观看菠萝蜜| 国产三级精品视频| 精品在线一区| 日本黄色三级视频| 国产精品77777| 国产综合在线观看视频| 国产美女www| 销魂美女一区二区三区视频在线| 欧美激情性做爰免费视频| 欧美肥妇bbwbbw| 不卡在线一区| 国产视频精品在线| 三级黄色片网站| 一区二区三区国产好| 欧美一区二区三区在线观看视频| 国产精品视频黄色| 婷婷激情一区| 91国在线观看| 一本久道综合色婷婷五月| 中文字幕在线中文字幕在线中三区| 亚洲永久精品国产| 男人c女人视频| 尤物视频在线看| 亚洲免费在线视频| 国产一级大片免费看| h片在线免费| 亚洲黄色小说网站| 成年女人18级毛片毛片免费| 国产盗摄精品一区二区酒店| 一区二区视频免费在线观看| 欧美a级免费视频| 成人三级小说| 欧美日韩在线视频首页| 国产真实乱子伦| 免费污视频在线一区| 欧美性感一类影片在线播放| www.xxx亚洲| 国产精品久久久久77777丨| 在线观看日韩电影| 国产三级国产精品国产专区50| 精品美女一区| 欧美一级免费观看| 久久久老熟女一区二区三区91| 日韩av资源网| 亚洲人成电影网站色| 五月天免费网站| 亚洲视频久久| 国产91精品久| 中文字幕欧美人妻精品| 国产乱码精品1区2区3区| yy111111少妇影院日韩夜片| 亚洲aⅴ在线观看| 国产精品人成在线观看免费| 裸体裸乳免费看| eeuss鲁一区二区三区| 欧美性生交大片免网| 日本人69视频| 牛牛影视久久网| 中文字幕久精品免费视频| 欧美人妻精品一区二区免费看| 一本色道88久久加勒比精品| 国产精品久久久久久久久免费| 国产激情无套内精对白视频| 久久这里只有精品6| 亚洲精品中文字幕乱码三区不卡| 中文av资源在线| 一本到三区不卡视频| 伊人精品视频在线观看| 天堂俺去俺来也www久久婷婷| 中文字幕精品www乱入免费视频| 丰满少妇被猛烈进入一区二区| 亚洲美女少妇无套啪啪呻吟| 国产伦精品免费视频| 免费的黄色av| 国产精品青草久久| www.亚洲视频.com| 日韩一级特黄| 亚洲欧美日韩国产精品| 欧美爱爱小视频| 日韩avvvv在线播放| 成人综合色站| 老司机午夜在线视频| 黑人欧美xxxx| 亚洲国产精品狼友在线观看| 欧美电影一二区| 日韩av手机在线看| 好吊色一区二区| 亚洲色图在线看| 欧美性猛交xxx乱久交| 小嫩嫩12欧美| 97在线观看免费| www.久久综合| 亚洲人成网站色在线观看| av视屏在线播放| 色橹橹欧美在线观看视频高清| 欧美精品少妇videofree| 亚洲无码久久久久久久| 久久久www免费人成精品| 精品久久久久久久久久中文字幕| 国产日本亚洲| yw.139尤物在线精品视频| 波多野结衣电车| 久久精品一区二区三区不卡| 亚洲熟妇无码另类久久久| 国产美女撒尿一区二区| 欧美日韩成人黄色| av av片在线看| 亚洲欧美激情视频在线观看一区二区三区 | 亚洲欧美一区二区三区不卡| 日韩欧美三级| 国产精品亚洲第一区| 成人精品福利| 欧洲亚洲精品在线| 成人午夜福利一区二区| 美女诱惑一区| 日韩欧美三级一区二区| 成人交换视频| 色偷偷综合社区| 一级全黄裸体免费视频| 综合久久久久久| 日本网站在线看| 最新国产精品久久久| 91精品婷婷国产综合久久蝌蚪| 黄色网页在线免费观看| 欧美一区二区三区喷汁尤物| 欧美色图一区二区| 成人国产电影网| 缅甸午夜性猛交xxxx| 日韩av影院| 国产精品久久久久久网站| jzzjzzjzz亚洲成熟少妇| 欧美日韩精品一区二区三区蜜桃| jizzjizzjizz国产| 国产精品一区二区你懂的| 国产成人永久免费视频| 啪啪激情综合网| 日本欧美爱爱爱| 一级日本在线| 日韩女优电影在线观看| 国产在线观看免费av| 久久久久亚洲蜜桃| 国产3p在线播放| 国产精品v日韩精品v欧美精品网站 | 在线视频亚洲欧美中文| 91国语精品自产拍在线观看性色 | 国模无码视频一区二区三区| 欧美禁忌电影| 成人激情黄色网| caoporn视频在线| 亚洲香蕉成人av网站在线观看| 亚洲无码久久久久久久| 亚洲3atv精品一区二区三区| 一道本在线观看| 国产一区欧美日韩| 国产91在线免费| 999久久久免费精品国产| 91免费看蜜桃| 范冰冰一级做a爰片久久毛片| 日韩有码在线播放| 四季av日韩精品一区| 欧美婷婷六月丁香综合色| 欧美日韩在线视频免费播放| 久久色中文字幕| 免费观看黄网站| 久久裸体视频| 久久男人资源站| 精品免费视频| 国产亚洲精品久久飘花| 日本免费在线一区| 国产91精品青草社区| 国产原创视频在线观看| 亚洲欧美综合区自拍另类| av av片在线看| 欧美午夜精品免费| 日韩无码精品一区二区三区| 综合久久综合久久| 一区二区三区四区免费| 粉嫩一区二区三区在线看| 色一情一区二区三区| 久久精品道一区二区三区| 国产美女作爱全过程免费视频| 欧美电影免费| 天堂社区 天堂综合网 天堂资源最新版 | 日韩午夜av| 国产又粗又硬又长| 热久久天天拍国产| 欧美日韩在线精品一区二区三区| 亚洲一区二区三区免费| 国产综合在线观看视频| 日本中文字幕一区二区| 欧美在线观看网址综合| 91九色美女在线视频| 九九热这里只有在线精品视| 在线视频91p| 亚洲色图第三页| 香蕉视频911| 亚洲成人精品视频| 精品国产无码AV| 91精品国产综合久久福利软件 | 国产精品老熟女一区二区| 国产精品你懂的在线| av中文字幕免费观看| av电影天堂一区二区在线观看| 午夜激情视频网| 国产精品中文有码| 91人妻一区二区三区| 国产乱子轮精品视频| 91女神在线观看| 久久av中文字幕片| 奇米影音第四色| 麻豆91精品视频| 亚洲欧美自拍另类日韩| 美女视频一区在线观看| 国产精品久久久毛片| 美腿丝袜在线亚洲一区| 亚洲 欧美 另类人妖| 蜜桃精品在线观看| av噜噜在线观看| 国内一区二区在线| 色哟哟在线观看视频| 成人一区二区三区视频 | 国产免费不卡视频| 日韩一本二本av| 亚洲第一第二区| 亚洲第一男人av| 女人天堂在线| 一区二区欧美久久| 精品国产99久久久久久| 欧美成人一二三| 丁香花高清在线观看完整版| 2024亚洲男人天堂| 992tv国产精品成人影院| 国产拍精品一二三| 视频一区日韩精品| 精品国产乱码久久久久久丨区2区 精品国产乱码久久久久久蜜柚 | 亚洲美女毛片| 久久婷婷国产91天堂综合精品| 免费观看在线综合| 日本黄色www| 99国内精品久久| 久久久久久成人网| 一区二区三区四区在线播放 | 精品视频1区2区3区| 国产熟女一区二区三区四区| 亚洲国产91色在线| 成人午夜影视| 欧美日韩成人在线视频| 小早川怜子影音先锋在线观看| 国产第一区电影| 免费观看亚洲视频大全| 久久久久欧美| 色综合狠狠操| 男女啪啪免费视频网站| 日韩成人一区二区| 亚洲精品久久久久久| 久久久久99精品一区| 欧美国产日韩在线观看成人| 婷婷亚洲久悠悠色悠在线播放| 伊人成人在线观看| 亚洲精品在线电影| 亚洲麻豆精品| 91精品国产99| 国产精品视频一区二区三区综合| 久久综合伊人77777麻豆| 99久久亚洲精品蜜臀| 无码人妻丰满熟妇区96| 国产在线观看免费一区| 亚洲一区二区观看| 一区二区三区四区激情| 久久这里只有精品9| 亚洲第一区中文字幕| 好了av在线| 国产97在线观看| 国产精品jk白丝蜜臀av小说| 尤物国产精品| 巨乳诱惑日韩免费av| 久久久久久久穴| 亚洲天堂2014| 少妇又紧又色又爽又刺激视频 | 成人黄色片网站| 久9久9色综合| 给我免费播放片在线观看| 精品一区二区三区欧美| 成人免费无遮挡无码黄漫视频| 亚洲午夜国产一区99re久久| 一区二区美女视频| 在线播放国产精品| www.com.cn成人| 狠狠色噜噜狠狠狠狠色吗综合 | 熟妇人妻va精品中文字幕| 成人av在线观| 久久久久久久久艹| 91精品中文字幕一区二区三区| 欧美zzoo| 91精品国产成人www| 精品久久97| 亚洲精品蜜桃久久久久久| 国产精品88av| 黄色一级片在线免费观看| 欧美一级久久久久久久大片| 麻豆视频在线免费观看| 国产欧美在线观看| 久久裸体网站| 国产色视频在线播放| 中文字幕欧美国产| 一区二区视频播放| 日韩中文字幕网| 涩涩涩久久久成人精品| 在线一区日本视频| 精品一区二区三区视频在线观看| 国产精品久久国产精麻豆96堂| 欧美四级电影在线观看| 在线看黄色av| 成人有码在线视频| 综合久久亚洲| 中文字幕乱码在线人视频| 亚洲精品欧美综合四区| 午夜老司机福利| 久久久久久噜噜噜久久久精品| 白白在线精品| 欧美精品久久久久久久免费| av不卡一区二区三区| 国产成人无码精品| 亚洲午夜久久久影院| 国产福利91精品一区二区| 资源网第一页久久久| 国产黑丝在线一区二区三区| 免费在线观看黄色av| 亚洲精品videossex少妇| 天堂电影一区| 色爱区成人综合网| 国内不卡的二区三区中文字幕| 美女福利视频在线观看| 亚洲国产精品久久久久| 樱桃视频成人在线观看| 亚洲精品久久区二区三区蜜桃臀 | 亚洲欧美一级二级三级| www国产视频| 日本二三区不卡| 国产激情小视频在线| 国产一区二区精品在线| 日韩电影在线一区二区| 超碰手机在线观看| 日韩成人中文字幕| 日本久久一区| 免费毛片网站在线观看| 久久精品夜色噜噜亚洲aⅴ| 国产精品无码免费播放| 97视频在线免费观看| 日韩av有码| av av在线| 欧美日韩黄色影视| 97天天综合网| 丝袜足脚交91精品| 成人av电影在线网| 在线观看一二三区| 性色av一区二区三区在线观看| av一区二区高清| 精品1卡二卡三卡四卡老狼| 欧美性淫爽ww久久久久无| 色www永久免费视频首页在线| 欧美福利一区二区三区| 国产精品18久久久久久vr| 福利网址在线观看| 欧美激情综合亚洲一二区| 欧美国产一级|