Open14

Reactなんもわからんところから色々メモするスクラップ

nakayasu-yuichinakayasu-yuichi

最近は、create react app から始めずに viteを使うのが "イマドキ"らしい。
https://ja.vitejs.dev/

ここのチュートリアルなどを参考にまずは hello world 的なものを作るところから始めてみようと思う

nakayasu-yuichinakayasu-yuichi

UIライブラリとしては MUI を採用する
https://mui.com/

UIライブラリは依存度が強すぎるとバージョンアップ時に苦労するらしい。
最初は採用するものの、ブロジェクトが大きくなる前に色々と考えた方がいいのかも?
(まだわからない)

nakayasu-yuichinakayasu-yuichi

バックエンドができていない状態では、モックデータが欲しいところ。
そういう場合は、MSWを使用すると良いとのこと。
まだ何者かもよく分かっていないが、プロジェクトを作ってから使い方や導入方法などを見ていこうと思う
https://mswjs.io/

MSW = Mock Service Worker

導入は、この記事あたりを参考にしよう
https://zenn.dev/higuchimakoto/articles/d9865193910046

nakayasu-yuichinakayasu-yuichi

node.js は最新にしておいた方がいいという助言のもと、とりあえず22系かな。と

普通にダウンロードしたらv20.18.0だった

nakayasu-yuichinakayasu-yuichi

Viteでプロジェクトを作った

npm create vite@latest . -- --template react-ts

続いて、こちらを打つことでアプリが立ち上がる

npm install
npm run dev

ブラウザで見るには o + enter

nakayasu-yuichinakayasu-yuichi

しかし、みんなが取り扱いに慣れている ReactRouterを採用することにした
https://reactrouter.com/en/main

  • 知見がたまっているので、人に聞きやすい
  • 急激に陳腐化するものではない
  • 従来のシンプルなルーターから少し離れてきている(らしい) メジャーバージョンアップでそれが顕著に
nakayasu-yuichinakayasu-yuichi

VSCodeに「Prettier」を導入した。
これでコードフォーマットを自動でしてくれる。

https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode

  1. リポジトリのルートに.vscodeディリクトリを作って、settings.jsonを配置。
  2. 中身は以下のようにした
{
  "[typescript]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  },
  "[javascript]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  },
  "editor.formatOnSave": true,
  "eslint.workingDirectories": [
    {
      "mode": "auto"
    }
  ]
}
nakayasu-yuichinakayasu-yuichi

index.htmlのデフォルトのHTMLはlang="en"になっているため、jaに変更した。
日本向けのWEBアプリだったらまずやっておいたほうがいいだろうという細かい実装

<!doctype html>
<html lang="ja">
:
nakayasu-yuichinakayasu-yuichi

今回なら、components/articles というディレクトリに

  • components/articles/article-list
  • components/articles/article
    というディレクトリわけをした。

それぞれの下に export文だけを書くファイルである index.tsを置いて、
呼び出し側で簡単にインポートができるようにしておく

nakayasu-yuichinakayasu-yuichi

各コンポーネントは以下のように定義する (一例)

import React from 'react';

interface HogeProps {
  fuga: string;
}

export const Hoge = ({
  fuga
}: HogeProps) => {
  return (
    <何かしらのDOM />
  );
};
nakayasu-yuichinakayasu-yuichi

ディレクトリ構成

参考
https://zenn.dev/manalink_dev/articles/bulletproof-react-is-best-architecture#ディレクトリ構造が勉強になる

src
|
+-- app # アプリケーションレイヤが含まれる:
|             (このフォルダは使用するメタフレームワークによって異なるかもしれません。)
| +-- routes # アプリケーションのルート / ページにもなる
| +-- app.tsx # メインアプリケーションコンポーネント
| +-- provider.tsx # 異なるグローバルプロバイダでアプリケーション全体をラップするアプリケーションプロバイダ
| +-- router.tsx # アプリケーションルータの設定
+-- assets # assetsフォルダには、画像やフォントなどの静的ファイルを格納できます。
|
+-- components # アプリケーション全体で使用される共有コンポーネント
|
+-- config # グローバル設定、エクスポートされた環境変数など。
|
+-- features # 機能ベースのモジュール
|
+-- hooks # アプリケーション全体で使われる共有フック
|
+-- lib # アプリケーション用にあらかじめ設定された再利用可能なライブラリ
|
+-- stores # グローバルなステートストア
|
+-- test #ユーティリティとモック
|
+-- types # アプリケーション全体で使われる共有型
|
+-- utils # 共有ユーティリティ関数