sinsky
@sinsky

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

ReactからHTMLファイルへのエクスポートが可能か

解決したいこと

本来React等を使用するなら、
複数のページネーションや無限ロードが最適かと思われます。

それらが必要ないが、map等を使って手間を削減するために、
Reactを使ってページを作成し、
静的HTMLだけのエクスポートがしたいと思っています。

下記が例となりますが、更新頻度の低いサイトとなります.

他のUIフレームワークを増やしたい時とかにHTMLタグも記載するのはいささか面倒です。
(CSSや他のデータを使うとなおのこと)
とはいえ、build時に固定したデータを用いてエクスポートを行うので、
サイト上では動的に変化するわけではないため、わざわざReact等もビルドしてサイズの大きいファイルにするのは勿体無い(?)かと思ってしまいます。

何かしら方法があるのであれば教えていただきたいです。

data.json
{
  "data": [
    "Material UI",
    "Bootstrap",
    "Chakura UI",
    "Ant Design"
  ]
}
import.jsx
import data from "./data.json";

export const App = () => {
  const {data} = data;
  return (
    <>
      {data.map(v=><div>{v}</div>)}
    </>
  );
};

上のimport.jsxを使って下記の静的ファイルを出力する

export.html
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
  </head>
  <body>
    <div id="app">
      <div>Material UI</div>
      <div>Bootstrap</div>
      <div>Chakura UI</div>
      <div>Ant Design</div>
    </div>
  </body>
</html>
0

2Answer

staticなHTMLが出力したいということであればNext.jsとかができます.
頻繁に変化しないと分かっているデータをgetStaticProps経由で取り込むことで,ビルド時にのみ読み込み処理を行うことが可能です.

こちらでexportしてもJSはバンドルされますが,webpackを使用する以上まあ仕方のない所です.

1Like

Comments

  1. @sinsky

    Questioner

    ご回答ありがとうございます。
    普段はviteを使って静的ファイルへの出力をしていますが、
    やはり難しいのですね。。。
    簡単なシングルページを作る際にわざわざJSファイルの読み込みも必要なのだろうかと思ったのですが、残念です(´・ω・)

SSG(Static Site Generation)で検索すると色々出てくると思います。
実験的ではありますがNext.jsでもただのHTMLとして出力する設定があるようです。

自身で実装する場合はReactDOMServerなどが使えそうです。

1Like

Comments

  1. @sinsky

    Questioner

    ありがとうございます!
    言われてみてばSSGで考えたらよかったのですね。。。
    早速やってみようと思います。

Your answer might help someone💌