javascript - 如何在 React.js 中将文本的一部分加粗?

标签 javascript regex reactjs

我正在构建一个搜索组件,对于每个可能的自动建议,我想突出显示搜索词出现的位置。

我找到了this我一直在尝试使用正则表达式来实现我想要的结果,但我认为组件工作方式中的某些东西阻止了它工作,而且我不知道如何让它工作。

这就是我正在尝试做的事情:

var reg = new RegExp(searchTerm, "gi");


return (
  <div className="single-result">
      {result.name.replace(reg, searchTerm => {
        return <div className="single-result__bold"> {searchTerm}</div>;
      })}
  </div>
);

但是我打印出来的内容是这样的:

[object Object]A[object Object]d[object Object]a[object Object]l[object Object]i[object Object]n[object Object]e[object Object] [object Object]A[object Object]r[object Object]r[object Object]a[object Object]u[object Object]l[object Object]t[object Object]

最佳答案

replace 函数不是为与 JSX 一起使用而构建的,它会将虚拟 DOM 节点转换为字符串。

string.replace 的此重载期望其第二个参数是返回字符串的函数(如果不是,则将其转换为字符串)。在本例中,您将从该函数返回一个 JSX 节点,当它通过 .toString() 时显示为 [object Object] - replace 函数然后将不匹配的字符串与函数的输出(即上面显示的字符串)连接起来。这个狡猾的字符串是输出到 React 的内容,所以这就是它渲染的内容。

相反,您可以使用重复调用string.search(或在较低级别的regex.match)来找出每个匹配项的索引(以及匹配自身),然后输出不匹配文本和匹配文本的 DOM 节点的数组。

这样的数组可能看起来像:

[
   "This text surrounds a ",
   <div className="single-result__bold">match</div>,
   ", but is still in a normal text node"
];

然后可以在react/JSX中渲染上面的数组,并按照您的预期显示。

关于javascript - 如何在 React.js 中将文本的一部分加粗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59971842/

相关文章:

javascript - 对象数组格式错误

ruby - 验证带有扩展名的电话号码格式

facebook - 如何在测试 React.js 应用程序时从 Jest 获得测试覆盖率?

regex - 替换斜杠之间的字符

javascript - 为什么当我console.log(event) for `from` onSubmit时,我没有看到preventDefault方法

reactjs - Axios 发布请求在提交时抛出 431 错误

javascript - jquery 建议或帮助将 flash 转换为 jQuery

javascript - React-router:将 Prop 传递给 child

javascript - 如何使用 WebGL 绘制正方形

javascript - 使用 JavaScript 拆分字符串但忽略其中的 HTML 字符