反应组分我有来自服务器,例如一个HTML字符串:渲染定制HTML字符串内从服务器
const myString = '<p>Here goes the text [[dropdown]] and it continues</p>`;
我这个字符串分割成3个部分,以便其结果如下:
const splitString = [
'<p>Here goes the text ',
'[[dropdown]]',
' and it continues</p>'
];
然后我处理这些3份以与反应部件替换下拉:
const processedArr = splitString.map((item) => {
if (/* condition that checks if it's `[[dropdown]]` */) {
return <Dropdown />;
}
return item;
}
于是毕竟,我得到处理的阵列,它看起来像这样:
['<p>Here goes the text ', <Dropdown />, ' and it continues</p>']
当我渲染,它呈现的HTML作为文本(显然)与Dropdown
组件(即呈现正常)的间文本。这里的问题是我不能使用{ __html: ... }
,因为必须使用它,例如<div dangerouslySetInnerHTML={{ __html: ... }} />
。我无法在字符串周围添加<div>
,因为这会删除<p>
标记。
我想到了部分分成标签,然后在某种循环做这样的事情:
React.createElement(tagName, null, firstTextPart, reactComponent, secondTextPart);
但这需要相当复杂的逻辑,因为可能有一个<p>
标签,有内有多个[[dropdown]]
小号也可以嵌套标签。
所以我现在卡住了。也许我从一个非常奇怪的角度看待这个问题,这可以在React中以不同的方式完成。我知道React社区不鼓励从字符串中呈现HTML,但我无法绕过这一点,我总是必须从服务器接收文本。
我发现唯一相关的stackoverflow问题是this one,但是,它假设来自后端的内容始终具有相同的结构,因此无法在我的情况下使用它,因为内容可以是任何内容。
编辑: 经过一些挖掘后,我发现这个question and answer这似乎有点解决我的问题。但是,使用react-dom/server
包与renderToString
方法将我的组件翻译为字符串并将其连接起来,仍然感觉有点奇怪。但我会试一试,并会发布更多的信息,如果它的工作,并符合我的需求。