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

React實現(xiàn)模糊搜索和關(guān)鍵字高亮的示例代碼

 更新時間:2023年11月18日 13:56:18   作者:某哈壓力大  
這篇文章主要為大家詳細介紹了React如何實現(xiàn)模糊搜索和關(guān)鍵字高亮的效果,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下

背景

公司需要一個可視化頁面,作為Redis查詢展示的工具,方便同事進行快速檢索。

要求將后端返回的報文,完整展現(xiàn)在識圖中,并且可以提供關(guān)鍵詞檢索和關(guān)鍵詞點亮的功能,以便快速定位關(guān)鍵詞。

整體效果預(yù)覽:

主要功能

點擊搜索:返回的大字符串形式報文被組裝成JSON的格式,點擊搜索匹配相應(yīng)字段, 并高亮顯示

點擊區(qū)分大小寫:模糊匹配 OR 精確匹配

查找下一個:被選中的字段,往下移動一個,下一個的背景顏色切換為另一高亮色

解決

  • 匹配到的文本,動態(tài)插入樣式
  • 使用正則解決匹配問題
  • 點擊下一個時,動態(tài)切換類名和背景色

代碼實現(xiàn)

僅僅貼出主要代碼

DOM

...
<Input 
    value={this.state.txt}
    placeholder="請輸入檢索內(nèi)容"
    onChange={e => this.setState({txt: e.target.value})}
></Input>
<Button onClick={this.dispatchHighLightText}>
    搜索
</Button>
...
<CheckBos 
    checked={this.state.isCheck}
    onChange={e => this.setState({isCheck: e.target.checked})}
>
	區(qū)分大小寫
</CheckBos>
...
<Button
    onClick={this.searchToNext}
>
    查找下一個
</Button>

...
<pre
    dangerouslySetInnerHTML={{__html: this.state.information}}
    contentEditable
>
    {/*動態(tài)插入html的容器*/}
</pre>

CSS

// 每個匹配到的都有的類名
.highLight{
    background-color: #a9a9a9;
}
// 點擊下一個時的類名,默認為第一個
.current{
    background-color: #32aaf8;
}

JS

點擊搜索時

colorIndex = 0; // 初始化高亮標記
_information = ''; // 文本備份
dispatchHighLightText = () => {
    const {txt} = this.state; // 檢索內(nèi)容
    if(!txt){
        message.warning("請先輸入查詢條件"); 
        return;
    }
    // 重置高亮標記
    colorIndex = 0;
    const regex = new RegExp(txt, this.state.isCheck ? 'g' : 'gi'); // 不勾選 => 模糊匹配
    // 由于每次插入樣式都會污染文本,所以每次都需要從備份文本中重新渲染
    const newInformation = _information;
    const hightLightTxt = newInformation.replace(regex, (match,index) => `<span class="highLight"> ${match} </span>`);
    this.setState({infomation: hightLightTxt}, () => {
        // 視圖更新渲染然后,獲取到dom
        let highLightEle = document.querySelectorAll('.highLight');
        this.updateHeight(highLightEle)
    }); // render
}

// 點亮目標關(guān)鍵字
updateHeight = (highLightEle) => {
    highLightEle.forEach((element, index) => {
        if(index === colorIndex){
            element.classList.add('current');
            element.scrollIntoView({ behavior: 'smooth', block: 'center'});
        }else{
            element.classList.remove('current');
        }
    })
}

點擊 “下一個”

searchToNext = () => {
    let highLightEle = document.querySelectorAll('.highLight');
    if(heighLightEle.length){
        colrIndex = (colorIndex + 1 + highLightEle.length) % highLightEle.length;
        this.updateHeight(highLightEle)
    }
}

反思

  • 本來想用偏移量window.getSelection 和 document.createRange 以及相關(guān)api模擬富文本實現(xiàn)光標跳轉(zhuǎn)定位的,可是發(fā)現(xiàn)偏移量不好確定(小菜雞)
  • 每次渲染的時候需要拿新的備份的文本進行替換,不要用臟數(shù)據(jù)
  • pre標簽可以很好的保留文本原來的樣式,不能用textarea
  • dangerouslySetInnerHTML接收的是一個對象

以上就是React實現(xiàn)模糊搜索和關(guān)鍵字高亮的示例代碼的詳細內(nèi)容,更多關(guān)于React模糊搜索和關(guān)鍵字高亮的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • React?useEffect不支持async?function示例分析

    React?useEffect不支持async?function示例分析

    這篇文章主要為大家介紹了React?useEffect不支持async?function示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • React庫之react-beautiful-dnd介紹及其使用過程

    React庫之react-beautiful-dnd介紹及其使用過程

    在使用React構(gòu)建Web應(yīng)用程序時,拖拽功能是一項常見需求,為了方便實現(xiàn)拖拽功能,我們可以借助第三方庫react-beautiful-dnd,本文將介紹react-beautiful-dnd的基本概念,并結(jié)合實際的項目代碼一步步詳細介紹其使用過程,需要的朋友可以參考下
    2023-11-11
  • react hooks實現(xiàn)防抖節(jié)流的方法小結(jié)

    react hooks實現(xiàn)防抖節(jié)流的方法小結(jié)

    這篇文章主要介紹了react hooks實現(xiàn)防抖節(jié)流的幾種方法,文中通過代碼示例給大家講解的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-04-04
  • react中useState改變值不渲染的解決方式

    react中useState改變值不渲染的解決方式

    這篇文章主要介紹了react中useState改變值不渲染的解決方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • react-routerV6版本和V5版本的詳細對比

    react-routerV6版本和V5版本的詳細對比

    React-Router5是React-Router6的前一個版本,它已經(jīng)被React-Router6取代,React-Router 6是一次較大的重大更新,本文就來介紹一下react-routerV6版本和V5版本的詳細對比,感興趣的可以了解一下
    2023-12-12
  • React受控組件和非受控組件對比詳解

    React受控組件和非受控組件對比詳解

    在使用React搭建用戶界面時,組件可以分為兩類:受控組件和費受控組件這兩種組件在數(shù)據(jù)處理方式上有著顯著的差異,理解它們的區(qū)別對于構(gòu)建高效和可控的React應(yīng)用至關(guān)重要,本文將深入探討這兩種組件的定義、特點以及使用場景,并通過示例代碼幫助你更加清晰地理解它們
    2025-01-01
  • React 中常用的幾種路由跳轉(zhuǎn)方式小結(jié)

    React 中常用的幾種路由跳轉(zhuǎn)方式小結(jié)

    基本路由跳轉(zhuǎn)是最常見的一種方式,下面介紹React 中常用的幾種路由跳轉(zhuǎn)方式,感興趣的朋友一起看看吧
    2023-12-12
  • React實現(xiàn)浮層組件的思路與方法詳解

    React實現(xiàn)浮層組件的思路與方法詳解

    React?浮層組件(也稱為彈出組件或彈窗組件)通常是指在用戶界面上浮動顯示的組件,本文主要介紹了浮層組件的實現(xiàn)方法,感興趣的小伙伴可以了解下
    2024-02-02
  • react中如何使用局部樣式

    react中如何使用局部樣式

    這篇文章主要介紹了react中如何使用局部樣式問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • React實現(xiàn)輪播效果

    React實現(xiàn)輪播效果

    這篇文章主要為大家詳細介紹了React實現(xiàn)輪播效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-08-08

最新評論

卫辉市| 肇东市| 华亭县| 宿州市| 日喀则市| 喜德县| 宁晋县| 怀安县| 建宁县| 农安县| 庆元县| 锡林郭勒盟| 南郑县| 怀柔区| 乐山市| 信阳市| 平阳县| 楚雄市| 长治市| 盐山县| 镇康县| 青海省| 东乌珠穆沁旗| 巩义市| 孟村| 顺平县| 桦南县| 浦东新区| 古浪县| 宁德市| 兴化市| 民县| 苍山县| 南部县| 六盘水市| 元阳县| 延安市| 乐昌市| 和田市| 易门县| 曲靖市|