摘要:被和模塊共享的工具函數(shù)源碼思路主要提供多個工具函數(shù)此為核心函數(shù),根據(jù)傳入的參數(shù),返回這樣的數(shù)據(jù)結(jié)構(gòu),分段標(biāo)識出語句的高亮部分及未高亮部分。供給外部進一步使用。
react-highlight-words
https://github.com/bvaughn/re...
一個React組件,用處:在一段文本中高亮展示某些單詞源碼思路
直接返回一個函數(shù)式組件
最重要是調(diào)用findAll函數(shù),返回[{start: startIndex, end: endIndex, highlight: boolean}, {同樣的結(jié)構(gòu)}],將一段句子合理的劃分為從前到后的高亮部分和未高亮部分
然后遍歷chunks, 返回高亮和未高亮兩種不同的DOM結(jié)構(gòu)
==核心就是將高亮部分和未高亮部分通過數(shù)據(jù)結(jié)構(gòu)(對象數(shù)組)進行標(biāo)識和區(qū)分,便于后續(xù)的處理==
findAll函數(shù)是highlight-words-core模塊提供的工具方法,所有后面會講解這個模塊。
/* @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-words和react-native-highlight-words模塊共享的工具函數(shù)源碼思路
主要提供多個工具函數(shù)
findAll
此為核心函數(shù),根據(jù)傳入的參數(shù),返回[{start, end, highlight}]這樣的數(shù)據(jù)結(jié)構(gòu),分段標(biāo)識出textToHighlight語句的高亮部分及未高亮部分。供給外部進一步使用。
combineChunks
將defaultFindChunks函數(shù)返回的chunks進行合并處理,把有重疊的塊合并為一個塊(若不合并,后續(xù)處理則會出現(xiàn)重復(fù)文字,與原文內(nèi)容都不一致了)
defaultFindChunks
通過正則匹配查找searchWords, 返回[{start, end}, {}] 這樣的數(shù)據(jù)結(jié)構(gòu)
fillInChunks
該函數(shù)接收chunksToHighlight,只包含高亮的部分,需要填充出未高亮的部分,才是完整表達出textToHighlight,同時更改了數(shù)據(jù)結(jié)構(gòu),變成 [{start, end, highlight}], 多出highlight
findAll -》 fillInChunks -》combineChunks -》defaultFindChunks
箭頭表示依賴關(guān)系,思路上也是層層遞進,有順序的。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/93197.html
摘要:有如下模塊源碼解析源碼解析源碼解析源碼解析源碼解析源碼解析源碼解析源碼解析源碼解析使用和監(jiān)控和博客從到學(xué)習(xí)介紹從到學(xué)習(xí)上搭建環(huán)境并構(gòu)建運行簡單程序入門從到學(xué)習(xí)配置文件詳解從到學(xué)習(xí)介紹從到學(xué)習(xí)如何自 Flink Metrics 有如下模塊: Flink Metrics 源碼解析 —— Flink-metrics-core Flink Metrics 源碼解析 —— Flink-metr...
摘要:機制博客從到學(xué)習(xí)介紹從到學(xué)習(xí)上搭建環(huán)境并構(gòu)建運行簡單程序入門從到學(xué)習(xí)配置文件詳解從到學(xué)習(xí)介紹從到學(xué)習(xí)如何自定義從到學(xué)習(xí)介紹從到學(xué)習(xí)如何自定義從到學(xué)習(xí)轉(zhuǎn)換從到學(xué)習(xí)介紹中的從到學(xué)習(xí)中的幾種詳解從到學(xué)習(xí)讀取數(shù)據(jù)寫入到從到學(xué)習(xí)項目如何運行從 Flink Checkpoint 機制 https://t.zsxq.com/ynQNbeM 博客 1、Flink 從0到1學(xué)習(xí) —— Apache Fl...
摘要:序列化機制博客從到學(xué)習(xí)介紹從到學(xué)習(xí)上搭建環(huán)境并構(gòu)建運行簡單程序入門從到學(xué)習(xí)配置文件詳解從到學(xué)習(xí)介紹從到學(xué)習(xí)如何自定義從到學(xué)習(xí)介紹從到學(xué)習(xí)如何自定義從到學(xué)習(xí)轉(zhuǎn)換從到學(xué)習(xí)介紹中的從到學(xué)習(xí)中的幾種詳解從到學(xué)習(xí)讀取數(shù)據(jù)寫入到從到學(xué)習(xí)項目如何 Flink 序列化機制 https://t.zsxq.com/JaQfeMf 博客 1、Flink 從0到1學(xué)習(xí) —— Apache Flink 介紹 2...
摘要:模塊中的類結(jié)構(gòu)如下博客從到學(xué)習(xí)介紹從到學(xué)習(xí)上搭建環(huán)境并構(gòu)建運行簡單程序入門從到學(xué)習(xí)配置文件詳解從到學(xué)習(xí)介紹從到學(xué)習(xí)如何自定義從到學(xué)習(xí)介紹從到學(xué)習(xí)如何自定義從到學(xué)習(xí)轉(zhuǎn)換從到學(xué)習(xí)介紹中的從到學(xué)習(xí)中的幾種詳解從到學(xué)習(xí)讀取數(shù)據(jù)寫入到從到學(xué) Flink-Client 模塊中的類結(jié)構(gòu)如下: https://t.zsxq.com/IMzNZjY showImg(https://segmentfau...
摘要:模塊中的類結(jié)構(gòu)如下博客從到學(xué)習(xí)介紹從到學(xué)習(xí)上搭建環(huán)境并構(gòu)建運行簡單程序入門從到學(xué)習(xí)配置文件詳解從到學(xué)習(xí)介紹從到學(xué)習(xí)如何自定義從到學(xué)習(xí)介紹從到學(xué)習(xí)如何自定義從到學(xué)習(xí)轉(zhuǎn)換從到學(xué)習(xí)介紹中的從到學(xué)習(xí)中的幾種詳解從到學(xué)習(xí)讀取數(shù)據(jù)寫入到從到學(xué) Flink-Annotations 模塊中的類結(jié)構(gòu)如下: https://t.zsxq.com/f6eAu3J showImg(https://segme...
閱讀 2789·2021-11-24 09:39
閱讀 2548·2021-11-23 09:51
閱讀 1802·2021-11-17 09:33
閱讀 1737·2021-10-22 09:54
閱讀 1871·2021-08-16 11:00
閱讀 3421·2019-08-30 15:53
閱讀 1733·2019-08-30 13:19
閱讀 2902·2019-08-30 12:49