我试图突出显示与查询匹配的文本,但我不知道如何将标记显示为HTML而不是文本.

var Component = React.createClass({
    _highlightQuery: function(name, query) {
        var regex = new RegExp("(" + query + ")", "gi");
        return name.replace(regex, "<strong>$1</strong>");
    },
    render: function() {
        var name = "Javascript";
        var query = "java"
        return (
            <div>
                <input type="checkbox" /> {this._highlightQuery(name, query)}
            </div>
        );
    }
});

当前输出:&lt;strong&gt;Java &lt/strong&gt; playbook

所需输出:Javascript

推荐答案

下面是我的简单twoliner助手方法:

getHighlightedText(text, highlight) {
    // Split text on highlight term, include term itself into parts, ignore case
    const parts = text.split(new RegExp(`(${highlight})`, 'gi'));
    return <span>{parts.map(part => part.toLowerCase() === highlight.toLowerCase() ? <b>{part}</b> : part)}</span>;
}

它返回一个跨度,其中请求的零件用<b> </b>个标记高亮显示.如果需要,可以简单地修改它以使用另一个标记.

UPDATE:为避免出现唯一的键缺失警告,以下是一个基于跨度和设置匹配零件的fontWeight样式的解决方案:

getHighlightedText(text, highlight) {
    // Split on highlight term and include term into parts, ignore case
    const parts = text.split(new RegExp(`(${highlight})`, 'gi'));
    return <span> { parts.map((part, i) => 
        <span key={i} style={part.toLowerCase() === highlight.toLowerCase() ? { fontWeight: 'bold' } : {} }>
            { part }
        </span>)
    } </span>;
}

Reactjs相关问答推荐

是否可能有不同的加载器用于路径有查询参数和没有查询参数,或者在React Router 6中添加它们时有条件地跳过一个加载器?

将cy.get()与动态类名一起使用?

如何在单击行中的图标时避免选中ionic 复选框?

可以使用mode.css/mode.scss引用常规的类名吗?

.populate() 方法在 mongodb 中不起作用

生产部署:控制台中 Firebase 无效 api 密钥错误

单击按钮不会切换组件(当按钮和组件位于两个单独的文件中时)

Next.js `getLayout` 函数没有被调用

React中的功能性组件克隆优化

React - 使用 React 显示错误和积极alert

下一次导出:未捕获的语法错误:标识符注册表已被声明

我正在try 使用 cypress 测试我的下拉列表,它 Select 值但不提交它们(手动工作)

更新和删除功能不工作 Asp.net MVC React

我刚刚部署了我的 Vite React 站点,但我的图标/图像没有部署

list 组件未按预期运行

如何使用react 路由将 url 参数限制为一组特定的值?

使用 useRef(uuid()) 的目的是什么?

你如何使用 refs 访问 React 中映射子项的值?

React - useParams() 不会失败 null / undefined 判断

错误未捕获的错误:[App] 不是 组件. 的所有子组件必须是