成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

react-highlight-words源碼解析

xiangzhihong / 1933人閱讀

摘要:被和模塊共享的工具函數(shù)源碼思路主要提供多個(gè)工具函數(shù)此為核心函數(shù),根據(jù)傳入的參數(shù),返回這樣的數(shù)據(jù)結(jié)構(gòu),分段標(biāo)識(shí)出語(yǔ)句的高亮部分及未高亮部分。供給外部進(jìn)一步使用。

react-highlight-words

https://github.com/bvaughn/re...

一個(gè)React組件,用處:在一段文本中高亮展示某些單詞
源碼思路

直接返回一個(gè)函數(shù)式組件

最重要是調(diào)用findAll函數(shù),返回[{start: startIndex, end: endIndex, highlight: boolean}, {同樣的結(jié)構(gòu)}],將一段句子合理的劃分為從前到后的高亮部分和未高亮部分

然后遍歷chunks, 返回高亮和未高亮兩種不同的DOM結(jié)構(gòu)

==核心就是將高亮部分和未高亮部分通過(guò)數(shù)據(jù)結(jié)構(gòu)(對(duì)象數(shù)組)進(jìn)行標(biāo)識(shí)和區(qū)分,便于后續(xù)的處理==

findAll函數(shù)是highlight-words-core模塊提供的工具方法,所有后面會(huì)講解這個(gè)模塊。

/* @flow */
import { findAll } from "highlight-words-core"
import PropTypes from "prop-types"
import React from "react"

Highlighter.propTypes = {
  activeClassName: PropTypes.string,
  activeIndex: PropTypes.number,
  activeStyle: PropTypes.object,
  autoEscape: PropTypes.bool,
  className: PropTypes.string,
  findChunks: PropTypes.func,
  highlightClassName: PropTypes.string,
  highlightStyle: PropTypes.object,
  highlightTag: PropTypes.oneOfType([
    PropTypes.node,
    PropTypes.func,
    PropTypes.string
  ]),
  sanitize: PropTypes.func,
  searchWords: PropTypes.arrayOf(PropTypes.string).isRequired,
  textToHighlight: PropTypes.string.isRequired,
  unhighlightClassName: PropTypes.string,
  unhighlightStyle: PropTypes.object
}

/**
 * Highlights all occurrences of search terms (searchText) within a string (textToHighlight).
 * This function returns an array of strings and s (wrapping highlighted words).
 */
export default function Highlighter ({
  activeClassName = "",
  activeIndex = -1,
  activeStyle,
  autoEscape,
  caseSensitive = false,
  className,
  findChunks,
  highlightClassName = "",
  highlightStyle = {},
  highlightTag = "mark",
  sanitize,
  searchWords,
  textToHighlight,
  unhighlightClassName = "",
  unhighlightStyle
}) {
  const chunks = findAll({
    autoEscape,
    caseSensitive,
    findChunks,
    sanitize,
    searchWords,
    textToHighlight
  })
  const HighlightTag = highlightTag
  let highlightCount = -1
  let highlightClassNames = ""
  let highlightStyles

  return (
    
      {chunks.map((chunk, index) => {
        const text = textToHighlight.substr(chunk.start, chunk.end - chunk.start)

        if (chunk.highlight) {
          highlightCount++

          const isActive = highlightCount === +activeIndex

          highlightClassNames = `${highlightClassName} ${isActive ? activeClassName : ""}`
          highlightStyles = isActive === true && activeStyle != null
            ? Object.assign({}, highlightStyle, activeStyle)
            : highlightStyle

          return (
            
              {text}
            
          )
        } else {
          return (
            
              {text}
            
          )
        }
      })}
    
  )
}
highlight-words-core

https://github.com/bvaughn/hi...

react-highlight-wordsreact-native-highlight-words模塊共享的工具函數(shù)
源碼思路

主要提供多個(gè)工具函數(shù)

findAll

此為核心函數(shù),根據(jù)傳入的參數(shù),返回[{start, end, highlight}]這樣的數(shù)據(jù)結(jié)構(gòu),分段標(biāo)識(shí)出textToHighlight語(yǔ)句的高亮部分及未高亮部分。供給外部進(jìn)一步使用。

combineChunks

defaultFindChunks函數(shù)返回的chunks進(jìn)行合并處理,把有重疊的塊合并為一個(gè)塊(若不合并,后續(xù)處理則會(huì)出現(xiàn)重復(fù)文字,與原文內(nèi)容都不一致了)

defaultFindChunks

通過(guò)正則匹配查找searchWords, 返回[{start, end}, {}] 這樣的數(shù)據(jù)結(jié)構(gòu)

fillInChunks

該函數(shù)接收chunksToHighlight,只包含高亮的部分,需要填充出未高亮的部分,才是完整表達(dá)出textToHighlight,同時(shí)更改了數(shù)據(jù)結(jié)構(gòu),變成 [{start, end, highlight}], 多出highlight

findAll -》 fillInChunks -》combineChunks -》defaultFindChunks

箭頭表示依賴(lài)關(guān)系,思路上也是層層遞進(jìn),有順序的。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/93197.html

相關(guān)文章

  • Flink Metrics 源碼解析

    摘要:有如下模塊源碼解析源碼解析源碼解析源碼解析源碼解析源碼解析源碼解析源碼解析源碼解析使用和監(jiān)控和博客從到學(xué)習(xí)介紹從到學(xué)習(xí)上搭建環(huán)境并構(gòu)建運(yùn)行簡(jiǎn)單程序入門(mén)從到學(xué)習(xí)配置文件詳解從到學(xué)習(xí)介紹從到學(xué)習(xí)如何自 Flink Metrics 有如下模塊: Flink Metrics 源碼解析 —— Flink-metrics-core Flink Metrics 源碼解析 —— Flink-metr...

    sshe 評(píng)論0 收藏0
  • Flink 源碼解析 —— 深度解析 Flink Checkpoint 機(jī)制

    摘要:機(jī)制博客從到學(xué)習(xí)介紹從到學(xué)習(xí)上搭建環(huán)境并構(gòu)建運(yùn)行簡(jiǎn)單程序入門(mén)從到學(xué)習(xí)配置文件詳解從到學(xué)習(xí)介紹從到學(xué)習(xí)如何自定義從到學(xué)習(xí)介紹從到學(xué)習(xí)如何自定義從到學(xué)習(xí)轉(zhuǎn)換從到學(xué)習(xí)介紹中的從到學(xué)習(xí)中的幾種詳解從到學(xué)習(xí)讀取數(shù)據(jù)寫(xiě)入到從到學(xué)習(xí)項(xiàng)目如何運(yùn)行從 Flink Checkpoint 機(jī)制 https://t.zsxq.com/ynQNbeM 博客 1、Flink 從0到1學(xué)習(xí) —— Apache Fl...

    0x584a 評(píng)論0 收藏0
  • Flink 源碼解析 —— 深度解析 Flink 序列化機(jī)制

    摘要:序列化機(jī)制博客從到學(xué)習(xí)介紹從到學(xué)習(xí)上搭建環(huán)境并構(gòu)建運(yùn)行簡(jiǎn)單程序入門(mén)從到學(xué)習(xí)配置文件詳解從到學(xué)習(xí)介紹從到學(xué)習(xí)如何自定義從到學(xué)習(xí)介紹從到學(xué)習(xí)如何自定義從到學(xué)習(xí)轉(zhuǎn)換從到學(xué)習(xí)介紹中的從到學(xué)習(xí)中的幾種詳解從到學(xué)習(xí)讀取數(shù)據(jù)寫(xiě)入到從到學(xué)習(xí)項(xiàng)目如何 Flink 序列化機(jī)制 https://t.zsxq.com/JaQfeMf 博客 1、Flink 從0到1學(xué)習(xí) —— Apache Flink 介紹 2...

    y1chuan 評(píng)論0 收藏0
  • Flink Clients 源碼解析

    摘要:模塊中的類(lèi)結(jié)構(gòu)如下博客從到學(xué)習(xí)介紹從到學(xué)習(xí)上搭建環(huán)境并構(gòu)建運(yùn)行簡(jiǎn)單程序入門(mén)從到學(xué)習(xí)配置文件詳解從到學(xué)習(xí)介紹從到學(xué)習(xí)如何自定義從到學(xué)習(xí)介紹從到學(xué)習(xí)如何自定義從到學(xué)習(xí)轉(zhuǎn)換從到學(xué)習(xí)介紹中的從到學(xué)習(xí)中的幾種詳解從到學(xué)習(xí)讀取數(shù)據(jù)寫(xiě)入到從到學(xué) Flink-Client 模塊中的類(lèi)結(jié)構(gòu)如下: https://t.zsxq.com/IMzNZjY showImg(https://segmentfau...

    xiao7cn 評(píng)論0 收藏0
  • Flink Annotations 源碼解析

    摘要:模塊中的類(lèi)結(jié)構(gòu)如下博客從到學(xué)習(xí)介紹從到學(xué)習(xí)上搭建環(huán)境并構(gòu)建運(yùn)行簡(jiǎn)單程序入門(mén)從到學(xué)習(xí)配置文件詳解從到學(xué)習(xí)介紹從到學(xué)習(xí)如何自定義從到學(xué)習(xí)介紹從到學(xué)習(xí)如何自定義從到學(xué)習(xí)轉(zhuǎn)換從到學(xué)習(xí)介紹中的從到學(xué)習(xí)中的幾種詳解從到學(xué)習(xí)讀取數(shù)據(jù)寫(xiě)入到從到學(xué) Flink-Annotations 模塊中的類(lèi)結(jié)構(gòu)如下: https://t.zsxq.com/f6eAu3J showImg(https://segme...

    Eirunye 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<