【React】Webサイトにちょい足ししてCRUDなどを操作をする方法
Web制作など既存のWebサイトや、そこまでガチガチにReactなどを使う必要がないときでもReactをちょい足ししてリッチする方法を紹介します。
企業サイトを作成する場合は、カタログの一括ダウンロードだったり、商品を顧客がまとめてチェックしてみれるようにするなど、いろいろできるようになります。
ReactでWebサイトにちょい足ししてCRUDなどを操作をする方法
ディレクトリ構造
project/
├── src/
│ ├── catalog/
│ │ └── Catalog.js
│ └── index.js
├── public/
│ └── index.html
├── webpack.config.js
├── package.json
└── babel.config.json
REACTとREACT DOMをインストールする
npm install react react-dom
こちらのコマンドでReactの必要なパッケージをインストールします。
BabelでJSXを読めるように、インストールする
npm install @babel/core @babel/preset-env @babel/preset-react babel-loader --save-dev
webpack.config.jsの設定を変更する
module.exports = {
module: {
rules: [
{
test: /\.js$/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env', '@babel/preset-react'],
'compact': false
}
},
}
]
},
}
もしwebpackを使ってバンドルしている場合は、preetsを変更する必要があります。
'@babel/preset-react’を足すことでreactも正常にバンドルできるようになります。
エラーが出る場合は、presetがちゃんと上のようにReactの分も含まれているか確認します。
compact: falseのオプションは出力コードを圧縮せず可読性を確保する設定で、デバッグ時に役立ちます。
React 19やWebpackのデフォルト設定では不要な場合が多くなっているのでcompactのオプションはなくても問題ありません。
html
<section class="top" id="top">
<nav id="navigation"></nav>
</section>
まずはマウントするためのhtmlです。id属性などなんでもいいのでDOMを準備します。
catalog.js
import React from 'react';
import { createRoot } from 'react-dom/client';
import Catalog from './catalog/Catalog'
const domNode = document.getElementById('navigation');
const root = createRoot(domNode);
root.render(
<Catalog />
);
ReactDOM.createRootはReact 18以降で導入され、以前のバージョンでは動作しないため、ReactV18や、V19を使用するようにしましょう。
カタログの一括ダウンロードを作るとして、catalog.jsというファイルを用意しています。
別にapp.jsでもなんでも大丈夫です。
catalog/Catalog.js
import React from 'react'
const Catalog = () => {
return (
<h1>Hello World cataghhh!</h1>
)
}
export default Catalog
そして、Catalogコンポーネントの内容を記述します。
これであとは、好きなようにReactのコンポーネントを拡張していけばOKです。
React V19のRefreshのセットアップ(開発体験向上)
React 19を使用する場合、ホットリロード機能の「React Refresh」を導入することで、開発体験が向上します。以下の内容を記事に追加すると、より実践的になります。
npm install react-refresh @pmmmwh/react-refresh-webpack-plugin --save-dev
webpack.config.jsにReact Refresh用の設定を追加
const ReactRefreshWebpackPlugin = require('@pmmmwh/react-refresh-webpack-plugin');
module.exports = {
mode: 'development', // 本番環境では不要
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env', '@babel/preset-react'],
plugins: ['react-refresh/babel'],
},
},
},
],
},
plugins: [
new ReactRefreshWebpackPlugin(),
],
devServer: {
hot: true,
},
};
React Refreshを利用することで、開発時にページをリロードせずに変更が反映されるようになります。
React.StrictModeの推奨
React 19では、StrictModeがより重要な役割を果たします。
import React from 'react';
import { createRoot } from 'react-dom/client';
import Catalog from './catalog/Catalog';
const domNode = document.getElementById('navigation');
const root = createRoot(domNode);
root.render(
<React.StrictMode>
<Catalog />
</React.StrictMode>
);
開発中に潜在的な問題を検出しやすくなるため、特に学習目的や開発時におすすめです。
まとめ
REACTとREACT DOMだけでなく、BabelでJSXを読めるように@babel/core @babel/preset-env @babel/preset-react babel-loaderあたりを読み込む点が詰まりどころですので、もし動かない場合は、presetをちゃんとインストールして設定しているかを確認しましょう。