<p class="tree-test-1"> {node.name.replace( new RegExp(this.searchInput, "g"), <span style="color:red">{this.searchInput}</span> )} </p>为什么返回是数组
时间: 2024-02-14 10:07:50 浏览: 78
这段代码应该是在渲染一颗树形结构时使用的,每个节点都会被渲染成一个 `<p>` 标签。由于节点名称中可能会包含多个与搜索框输入内容匹配的字符串,因此 `replace` 方法返回的是一个替换后的字符串数组,而不是一个字符串。
如果你只想获取单个字符串,可以将数组的第一个元素取出来,比如:
```
<p class="tree-test-1">
{node.name.replace(
new RegExp(this.searchInput, "g"),
<span style="color:red">{this.searchInput}</span>
)[0]}
</p>
```
这样就只会显示替换后的第一个字符串。如果你想显示所有的字符串,可以使用 `map` 方法将数组中的每个元素都渲染成一个 `<span>` 标签,然后将它们拼接起来,比如:
```
<p class="tree-test-1">
{node.name
.replace(
new RegExp(this.searchInput, "g"),
`|$&|`
)
.split('|')
.map((part, index) => {
if (part === this.searchInput) {
return <span style={{ color: "red" }}>{part}</span>;
} else {
return <span>{part}</span>;
}
})}
</p>
```
这段代码中,我们首先在替换字符串时,将匹配的字符串用 `|` 包裹起来,以便后面使用 `split` 方法将字符串分割成数组。然后,我们对每个数组元素都进行渲染,并根据元素是否与搜索框输入内容匹配来设置不同的样式。最后,我们将所有渲染好的 `<span>` 标签拼接成一个字符串返回。
阅读全文