Функция replace
не создана для использования с JSX и преобразует ваши виртуальные узлы DOM в строки.
Эта перегрузка string.replace
ожидает, что ее второй аргумент будет функцией, возвращающей строку ( и если нет, он преобразует его в строку). В этом случае вы возвращаете узел JSX из этой функции, который отображается как [object Object]
, когда он проходит через .toString()
- функция 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"
];
приведенный выше массив может быть отображен в реагировать / JSX и будет отображаться так, как вы ожидаете.