我想在我的后端托管一些HTML,然后我可以插入到一个React组件。
我尝试过使用dangerouslySetInnerHTML
的解决方案,但同样不成功。
基本思想是,我希望有一个组件Content
,它获取一些HTML,然后返回一个包含该HTML的片段:
export async function Content({ resourcePath }) {
const response = await fetch(resourcePath, { method: 'GET' })
const html = await response.text();
return (
<>
{html}
</>
)
}
在后端,我在Express服务器上设置了路由,侦听resourcePath
上的GET
请求:
import express from 'express';
import fs from 'fs';
export const contentRouter = express.Router();
contentRouter.get('/content/homepage', (_, res) => {
const data = fs.readFileSync("path/to/page.html");
res.send(data.toString());
})
当我加载一个包含Content
组件的页面时,我能够记录来自响应的原始HTML,但控制台会显示大量错误。
我认为最相关的错误是
Objects are not valid as a React child (found: [object Promise]). If you meant to render a collection of children, use an array instead.
我怀疑这个问题与Promise有关,也就是说,在我当前编写的代码中,Content
组件试图返回一个包含Promise而不是解析值的片段。
如果是这种情况,如何将Content
的内部HTML设置为从获取返回的HTML?
2条答案
按热度按时间nue99wik1#
您可以在元素上使用dangerouslySetInnerHTML属性,有关详细信息,请参阅文档https://reactjs.org/docs/dom-elements.html#dangerouslysetinnerhtml
ijnw1ujt2#
根据@jonrsharpe的建议,我将
Content
函数设置为同步的:它工作,但它似乎有点像一个杂牌。如果你碰巧知道一个解决方案,更习惯,请随时张贴一个更好的解决方案。