📅  最后修改于: 2023-12-03 15:38:05.988000             🧑  作者: Mango
在 React.js 中,我们可以利用状态(state)和属性(props)的概念来管理动态数据并重新渲染组件。在本文中,我们将使用这些概念来实现一个输入框,让用户输入文本后,根据文本中包含的关键词进行高亮显示。
我们可以使用以下步骤来完成本次实现:
input
组件,用于让用户输入文本。input
组件中输入的文本保存到组件的状态中。首先,我们需要创建一个 input
组件,让用户输入文本。我们使用 useState
钩子来初始化状态:
import { useState } from 'react';
function InputBox() {
const [text, setText] = useState('');
const handleInput = (event) => {
setText(event.target.value);
}
return (
<input type="text" onChange={handleInput} value={text} />
);
}
export default InputBox;
当用户输入文本时,我们需要将其保存到组件的状态中,以便后续使用。我们使用 useState
钩子来初始化状态,并使用 onChange
事件来监听输入框的变化:
const [text, setText] = useState('');
const handleInput = (event) => {
setText(event.target.value);
}
return (
<input type="text" onChange={handleInput} value={text} />
);
接下来,我们需要使用正则表达式来匹配需要高亮的关键词。在本例中,我们假设用户输入的关键词以逗号分隔,如下所示:
React, JavaScript, CSS
我们可以使用以下正则表达式来匹配输入的文本中包含的关键词:
const regex = new RegExp(`(${keywords.join('|')})`, 'gi');
const highlightedText = text.replace(regex, '<span class="highlighted">$1</span>');
其中,keywords
是一个数组,包含用户输入的关键词,使用 join
方法将其转换为一个以 |
分隔的字符串。highlightedText
是经过正则表达式匹配后生成的新文本,在匹配成功的关键词前后添加了 <span>
标签用于高亮显示。
最后,我们需要将生成的新文本渲染到页面上。我们可以使用 dangerouslySetInnerHTML
属性来设置元素的 HTML 内容:
return (
<div dangerouslySetInnerHTML={{__html: highlightedText}} />
);
下面是完整的代码:
import { useState } from 'react';
function InputBox() {
const [text, setText] = useState('');
const handleInput = (event) => {
setText(event.target.value);
}
const keywords = text.split(',').map((keyword) => {
return keyword.trim();
}).filter((keyword) => {
return keyword !== '';
});
const regex = new RegExp(`(${keywords.join('|')})`, 'gi');
const highlightedText = text.replace(regex, '<span class="highlighted">$1</span>');
return (
<div dangerouslySetInnerHTML={{__html: highlightedText}} />
);
}
export default InputBox;
在本文中,我们介绍了如何使用 React.js 根据用户输入高亮显示文本。我们使用了组件状态和正则表达式来管理动态数据和匹配关键词,并使用 dangerouslySetInnerHTML
属性将新文本渲染到页面上。这个例子展示了 React.js 的一些基本概念和用法,希望对你有所帮助。