在 React 中动态渲染外部 HTML/React 组件

IT技术 javascript reactjs next.js wp-api
2021-05-22 04:51:40

是否可以从外部源获取 HTML/JSX 内容并在 React 中动态呈现它?在我们的例子中,我们希望从 Wordpress API 获取内容并在客户端和服务器上呈现它(我们使用 NextJS)

因此,Wordpress API 返回一个 JSON 响应,其中包含一个内容属性,它是一个 HTML/JSX 字符串。内容看起来像这样。

{
    content: "<div><Slider imageCount="5" galleryID="1"></Slider><span>This is an image gallery</span></div>"
}

所以,正如你所看到的,它将是 HTML 和 React 组件/JSX 的混合,表示为一个字符串

我会使用 Axios 进行调用以获取内容(在服务器和客户端上都使用 NextJS 的 getInitialProps() 方法),然后我需要渲染它,但我是新手,我可以看到一些问题。

1)在 React 中,JSX 是在构建时编译的,而不是运行时,我不知道如何解决这个问题(例如,在 Angular 中使用 $compile 服务会很容易)。

2)由于我们不知道来自 Wordpress 的内容将使用哪些组件,我们必须在页面顶部导入其中的每一个,内容可能包含一个组件,也可能包含一个组件,谁知道?。

现在,我认为这是不可能的,这意味着我们必须重新考虑使用 React,但我真的希望有人能给出答案。

任何帮助将不胜感激。

3个回答

有趣的问题!

您应该尝试react-jsx-parser我认为它可以解决您的问题。不确定它如何与 Next JS 一起使用 - 我没有使用 Next JS 的经验。

看看这个沙箱: 编辑 24r1ypp00p


您对捆绑所有组件的看法是正确的。有一个解决方法。:)

看看这个沙箱: 编辑 24r1ypp00p

我创建了一个dynamicComponent需要导入Promise并返回一个组件的。

我改变了 A、B 和 C 组件在index.js. 这样每个动态导入的组件都会获得一个单独的包,并且仅在需要时才被请求。

这应该可以解决您的第二个问题。

你可以参考以下链接

https://reactjs.org/docs/dom-elements.html#dangerouslysetinnerhtml

对于 React Components 部分,您可以使用以下方法呈现静态 HTML 标记字符串

https://reactjs.org/docs/react-dom-server.html#rendertostaticmarkup

但请确保您获得的 html 来自真实来源,并且不会包含任何恶意脚本

您可以像这样在 React 中动态渲染外部 HTML/React 组件,只需在这些引用中 , content: `<div>${<Slider imageCount="5" galleryID="1"></Slider>}<span>This is an image gallery</span></div>

以这些` 符号结尾。