国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
入門
通過Lunr.js實施倒立索引
gatsby-node.js中創(chuàng)建索引
添加搜索表格組件
創(chuàng)建搜索結果頁面
持續(xù)的搜索小部件(tartanify.com示例)
使小部件持續(xù)
自定義搜索查詢增強功能
結論
首頁 web前端 css教學 如何將LUNR搜索添加到您的Gatsby網站

如何將LUNR搜索添加到您的Gatsby網站

Apr 07, 2025 am 09:54 AM

如何將LUNR搜索添加到您的Gatsby網站

Jamstack Architecture在網站開發(fā)方面獲得了重大吸引力。您是否探索過Gatsby,Nuxt或Grysome?它們的易用性和預先建造的功能通常令人印象深刻。但是,搜索功能並不總是一個內置功能,對內容豐富的網站提出了挑戰(zhàn)。我們可以在沒有服務器端組件的情況下實現強大的搜索嗎?

jamstack固有地缺乏內置的搜索功能。這需要仔細考慮和實施。雖然存在選項,例如Algolia的搜索服務(對免費計劃的限制)或使用WPGRAPHQL和APOLLO客戶端利用WordPress的搜索,但本文側重於客戶端解決方案。

我們將使用Lunr.js構建搜索索引,並將搜索集成到Gatsby站點中,Lunr.js是一個輕巧的JavaScript庫,可提供可擴展且可自定義的搜索,而無需外部服務器依賴關係。我們最近在tartanify.com上使用它來添加“按塔爾坦名稱搜索”功能,克服了與持續(xù)的實時搜索有關的挑戰(zhàn)。本文將詳細介紹這些挑戰(zhàn)和解決方案。

入門

為簡單起見,我們將使用官方的Gatsby博客入門者。這摘要靜態(tài)網站創(chuàng)建的許多方面。跟隨:

 Gatsby New Gatsby-Starter-Blog https://github.com/gatsbyjs/gatsby-starter-blog
CD Gatsby-Starter-Blog
蓋茨比發(fā)展

這將創(chuàng)建一個帶有三個帖子的小博客,可在http://localhost:8000/ 。檢查http://localhost:8000/__graphql顯示可用數據。

通過Lunr.js實施倒立索引

Lunr採用了記錄級的倒置索引。這將站點上的每個單詞都映射到其位置(頁面路徑)。我們確定哪些字段(標題,內容,描述等)提供索引關鍵字。

對於我們的博客,我們將索引標題和內容。標題很簡單,但內容需要清潔。最初,使用rawMarkdownBody由於Markdown語法而被證明是有問題的。我們將使用html字段和striptags軟件包來刪除HTML標籤。有關詳細信息,請參閱LUNR文檔。

這是LUNR索引創(chuàng)建和人口片段(以後在gatsby-node.js中使用):

 const index = lunr(function(){
  this.ref('slug')
  this.field('title')
  this.field('content')
  對於(文檔的const doc){
    this.add(doc)
  }
}))

documents是一系列對象,每個對像都帶有slug , titlecontent

 {
  slug:'/post-slug/',,
  標題:“帖子標題”,
  內容:“發(fā)布所有HTML標籤的內容?!?}

我們定義一個唯一的文檔密鑰( slug )和兩個字段( titlecontent )。所有文檔都迭代添加。

gatsby-node.js中創(chuàng)建索引

首先,安裝必要的庫:

紗線添加lunr graphql型json striptags

接下來,修改gatsby-node.js 。該文件在站點構建過程中執(zhí)行,使我們可以添加索引創(chuàng)建。我們將使用Gatsby Api createResolvers創(chuàng)建一個新的根場LunrIndex

Gatsby的數據存儲和查詢功能通過GraphQL字段解析顯示。 getAllNodes檢索指定類型的節(jié)點:

 / * gatsby-node.js */
// ...(導入)

exports.CreateReSolvers =({cache,createresolvers})=> {
  createresolvers({
    詢問: {
      lunrindex:{
        類型:GraphQljSonObject,
        分辨:(源,args,context,info)=> {
          cont blognodes = context.nodemodel.getAllNodes({type:`markdownRemark`});
          const type = info.schema.getType(`markdownRemark`);
          返回createIndex(blognodes,type,cache);
        },,
      },,
    },,
  });
};

// ...(createIndex函數)

createIndex函數利用Lunr片段:

 / * gatsby-node.js */
// ...(導入)

const createIndex = async(blognodes,type,cache)=> {
  // ...(用於獲取和處理數據的實現,包括緩存)
};

(省略了完整的createIndex函數,包括數據獲取,處理和緩存,但對於簡潔起見,但對於功能實現至關重要。原始響應提供了此細節(jié)。)這確保僅在必要時重建索引。

添加搜索表格組件

創(chuàng)建搜索表單組件( src/components/search-form.js ):

 // ...(搜索表格組件實現)

(對於簡潔而言,省略了完整的組件實現,但在原始響應中已詳細介紹。)此組件處理表單提交和輸入更改,並用查詢參數導航到/search 。

創(chuàng)建搜索結果頁面

創(chuàng)建一個搜索結果頁面( src/pages/search.js ):

 // ...(搜索結果頁面實現)

(對於簡潔而言,省略了完整的頁面實現,但在原始響應中詳細介紹。)此頁面使用LunrIndex數據顯示搜索結果。

持續(xù)的搜索小部件(tartanify.com示例)

tartanify.com示例演示了一個持久的即時搜索小部件。索引創(chuàng)建類似於博客示例,但更簡單:

 // ...(tartanify.com的索引??創(chuàng)建)

(對於簡潔而言,省略了完整的實現,但在原始響應中已詳細介紹。)關鍵區(qū)別是由輸入更改觸發(fā)的即時搜索功能,而不是表格提交。 useStaticQuery Hook用於數據獲取。

使小部件持續(xù)

為了在頁面上維護搜索小部件,我們使用蓋茨比的wrapPageElement API:

 // gatsby-browser.js
// ...(包裝實現)

(在原始響應中詳細介紹了完整的實現。)這將頁面內容與搜索小部件包裝,以確保持久性。

自定義搜索查詢增強功能

原始響應詳細詳細介紹了使用Lunr query方法來改進搜索查詢的方法,以處理模糊匹配,通配符和布爾邏輯,以獲得更好的搜索結果。本節(jié)可顯著增強搜索體驗。

結論

在Jamstack網站中實施搜索功能是可以實現的,並且可以顯著改善用戶體驗。雖然似乎與Jamstack的無狀態(tài)性質不一致,但Lunr.js等客戶端解決方案提供了強大而靈活的替代方案。本文詳細介紹的仔細考慮和實施突出了通過周到的設計和開發(fā)創(chuàng)造出色的用戶體驗的潛力。

以上是如何將LUNR搜索添加到您的Gatsby網站的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發(fā)現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

什麼是AutoPrefixer,它如何工作? 什麼是AutoPrefixer,它如何工作? Jul 02, 2025 am 01:15 AM

Autoprefixer是一個根據目標瀏覽器範圍自動為CSS屬性添加廠商前綴的工具。 1.它解決了手動維護前綴易出錯的問題;2.通過PostCSS插件形式工作,解析CSS、分析需加前綴的屬性、依配置生成代碼;3.使用步驟包括安裝插件、設置browserslist、在構建流程中啟用;4.注意事項有不手動加前綴、保持配置更新、非所有屬性都加前綴、建議配合預處理器使用。

CSS教程,用於創(chuàng)建粘性標頭或頁腳 CSS教程,用於創(chuàng)建粘性標頭或頁腳 Jul 02, 2025 am 01:04 AM

TocreatestickyheadersandfooterswithCSS,useposition:stickyforheaderswithtopvalueandz-index,ensuringparentcontainersdon’trestrictit.1.Forstickyheaders:setposition:sticky,top:0,z-index,andbackgroundcolor.2.Forstickyfooters,betteruseposition:fixedwithbot

什麼是圓錐級函數? 什麼是圓錐級函數? Jul 01, 2025 am 01:16 AM

theconic-Gradient()functionIncsscreatesCircularGradientsThatRotateColorStopSaroundAcentralPoint.1.IsidealForPieCharts,ProgressIndicators,colordichers,colorwheels和decorativeBackgrounds.2.itworksbysbysbysbydefindefingincolordefingincolorstopsatspecificains off.

CSS自定義屬性的範圍是什麼? CSS自定義屬性的範圍是什麼? Jun 25, 2025 am 12:16 AM

CSS自定義屬性的作用域取決於其聲明的上下文,全局變量通常定義在:root中,而局部變量則定義在特定選擇器內,以便組件化和隔離樣式。例如,定義在.card類中的變量僅對匹配該類的元素及其子元素可用。最佳實踐包括:1.使用:root定義全局變量如主題色;2.在組件內部定義局部變量以實現封裝;3.避免重複聲明同一變量;4.注意選擇器特異性可能引發(fā)的覆蓋問題。此外,CSS變量區(qū)分大小寫,且應在使用前定義以避免錯誤。若變量未定義或引用失敗,則會採用回退值或默認值initial。調試時可通過瀏覽器開發(fā)者工

CSS教程,用於創(chuàng)建加載旋轉器和動畫 CSS教程,用於創(chuàng)建加載旋轉器和動畫 Jul 07, 2025 am 12:07 AM

創(chuàng)建CSS加載旋轉器的方法有三種:1.使用邊框的基本旋轉器,通過HTML和CSS實現簡單動畫;2.使用多個點的自定義旋轉器,通過不同延遲時間實現跳動效果;3.在按鈕中添加旋轉器,通過JavaScript切換類來顯示加載狀態(tài)。每種方法都強調了設計細節(jié)如顏色、大小、可訪問性和性能優(yōu)化的重要性,以提升用戶體驗。

CSS教程專注於移動優(yōu)先設計 CSS教程專注於移動優(yōu)先設計 Jul 02, 2025 am 12:52 AM

Mobile-firstCSSdesignrequiressettingtheviewportmetatag,usingrelativeunits,stylingfromsmallscreensup,optimizingtypographyandtouchtargets.First,addtocontrolscaling.Second,use%,em,orreminsteadofpixelsforflexiblelayouts.Third,writebasestylesformobile,the

如何將整個網格集中在視口中? 如何將整個網格集中在視口中? Jul 02, 2025 am 12:53 AM

要讓整個網格佈局在視口中居中顯示,可通過以下方法實現:1.使用margin:0auto實現水平居中,需設定容器固定寬度,適用於固定佈局;2.利用Flexbox在外層容器設置justify-content和align-items屬性,結合min-height:100vh可實現垂直和水平居中,適合全屏展示場景;3.直接使用CSSGrid的place-items屬性在父容器上快速居中,簡潔且現代瀏覽器支持良好,同時需確保父容器有足夠高度。每種方式均有適用場景和限制,根據實際需求選擇合適的方案即可。

如何創(chuàng)建本質上響應的網格佈局? 如何創(chuàng)建本質上響應的網格佈局? Jul 02, 2025 am 01:19 AM

要創(chuàng)建內在響應式網格佈局,核心方法是使用CSSGrid的repeat(auto-fit,minmax())模式;1.設置grid-template-columns:repeat(auto-fit,minmax(200px,1fr))讓瀏覽器自動調整列數並限制每列最小和最大寬度;2.使用gap控制格子間距;3.容器應設為相對單位如width:100%、配合box-sizing:border-box避免寬度計算錯誤並用margin:auto居中;4.可選設置行高與內容對齊方式提升視覺一致性,如row

See all articles