HTML/JSXコンテンツを外部ソースから取得して、Reactで動的にレンダリングすることは可能ですか?この例では、Wordpress APIからコンテンツを取得して、クライアントとサーバーの両方でレンダリングします(NextJSを使用しています)。
したがって、Wordpress APIは、HTML/JSXの文字列であるコンテンツプロパティを含むJSON応答を返します。コンテンツは次のようになります。
{
content: "<div><Slider imageCount="5" galleryID="1"></Slider><span>This is an image gallery</span></div>"
}
ご覧のとおり、HTMLとReact components/JSXの組み合わせで、文字列として表されます。
私はAxiosを使用してコンテンツを取得するための呼び出しを行い(サーバーとクライアントの両方でNextJSのgetInitialProps()メソッドを使用)、それをレンダリングする必要がありますが、反応するのが初めてで、いくつかの問題を確認できます。
1)Reactでは、JSXは実行時ではなくビルド時にコンパイルされます。これを回避する方法がわかりません(たとえば、Angular $ compileサービスを使用すると簡単です)。 。
2)Wordpressからのコンテンツが使用するコンポーネントがわからないため、ページの上部にあるすべてのコンポーネントをインポートする必要があります。コンテンツにはコンポーネントまたはコンポーネントが含まれている場合があります。
現在、これは不可能だと私は考えています。つまり、Reactを使用して再検討する必要があることを意味しますが、誰かが答えを期待しています。
どんな助けでも本当にいただければ幸いです。
興味深い問題!
react-jsx-parser を試してみてください。それはあなたの問題を解決すると思います。 Next JSでどのように機能するかわからない-Next JSの経験はありません。
すべてのコンポーネントがバンドルされるのはあなたの言うとおりです。そのための回避策があります。 :)
インポートのプロミスを期待してコンポーネントを返すdynamicComponent
を作成しました。
A、B、Cコンポーネントのインポート方法をindex.js
に変更しました。このようにして、各動的にインポートされたコンポーネントは個別のバンドルを取得し、必要な場合にのみ要求されます。
これで2番目の問題が解決されます。
以下のリンクを参照してください
https://reactjs.org/docs/dom-elements.html#dangerouslysetinnerhtml
React Componentsパーツの場合、静的HTMLマークアップ文字列を使用してレンダリングできます
https://reactjs.org/docs/react-dom-server.html#rendertostaticmarkup
ただし、取得するHTMLが本物のソースからのものであり、悪意のあるスクリプトが含まれていないことを確認してください