我正在尝试用React做一个实时的文本高亮显示器,现在这是我到目前为止得到的代码,它的灵感来自于一个使用innerHTML的解决方案,它不起作用。
const Highlighter = () => {
const [data, setData] = useState("");
const [search, setSearch] = useState("");
const getInput = (input) => {
setData(input.target.value);
};
const textoToSearch = (input) => {
setSearch(input.target.value);
search.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
let pattern = new RegExp(`${search}`, "gi");
let teste = data.replace(pattern, (match) => `<mark>${match}</mark>`);
console.log(teste)
};
return (
<div>
<textarea data-testid="source-text" onChange={getInput} />
<input
className="search"
data-testid="search-term"
onChange={textoToSearch}
/>
<p>
case sentitive?
<input type="checkbox" data-testid="case-sensitive" />
</p>
<div data-testid="result">{data}</div>
</div>
);
};
export default Highlighter;
1条答案
按热度按时间d5vmydt91#
你可以很容易地使用mark.js.install mark.js npm包。
那么下面的代码就可以了。
下面是codesandbox的示例