ReactのState管理にRecoilを採用
1. はじめに
こんにちは!しょみーといいます。現在Webエンジニア転職に向けてポートフォリオ作成中です!
Webアプリケーションの開発中にReactのState管理にRecoilを採用したので、今回はRecoilについて解説していきます。
2. 開発環境の紹介
Reactを使用したWebアプリケーションの開発では、State管理が重要な役割を果たします。State管理を効果的に行うために、様々なライブラリが提供されています。その中でも今回はFacebookが開発したRecoilを使用しました。
Recoilのようなグローバルなステート管理の仕組みを導入することにより、どのコンポーネントからでもその値にアクセスできるようになるため、不要なPropsの受け渡しがなくなります。
開発環境は、Reactをフロントエンドに採用し、TypeScriptを導入しました。ステート管理にはRecoilを使用。また、ルーティングにはreact-router-dom
を使用しました。
具体的な開発については、患者情報の管理システムを作成しています。患者の新規作成、一覧表示、更新といった基本的な機能を持つこのシステムで、どのようにRecoilが活用されているかを紹介します。
3. Recoilとその特徴の解説
3.1 RecoilRoot
Recoilは、アプリケーション全体で共有するStateを持つために、RecoilRoot
というプロバイダーコンポーネントを提供します。
RecoilRoot
は、アプリケーションの最上位に配置し、その子孫のコンポーネントからRecoilのステートにアクセス可能にします。
今回のコードでは、以下のようにApp
コンポーネントの一番外側でRecoilRoot
が使用されています。
// App.tsx
import { RecoilRoot } from 'recoil';
const App = () => {
return (
<RecoilRoot>
{/* Router and Routes are here */}
</RecoilRoot>
);
}
export default App;
3.2 atom
atom
はRecoilが提供する最も基本的なState単位です。atom
は、グローバルStateを定義し、それを変更するための関数を提供します。
ここで、key
とdefault
の二つのプロパティが必須となります。key
はグローバルStateの一意の識別子で、default
はそのStateの初期値です。
今回のコードでは、以下のようにpatients.ts
で患者のリストを管理するState、patientListState
がatom
を使用して定義されています。
// patients.ts
import { atom } from 'recoil';
export const patientListState = atom<Patient[]>({
key: 'patientListState',
default: [],
});
3.3 useRecoilValueとuseRecoilState
Recoilでは、StateにアクセスするためにuseRecoilValue
とuseRecoilState
という二つのフックを提供しています。
useRecoilValue
は、Stateの現在の値を読むためのフックで、Stateが変更されるとコンポーネントは再レンダリングされます。
一方、useRecoilState
は、Stateの現在の値を読み、そのStateを更新するための関数も返すフックです。
今回のコードでは、患者のリストを表示するPatientsList
コンポーネントでuseRecoilValue
が、新規患者を作成するPatientCreate
コンポーネントでuseRecoilState
がそれぞれ使用されています。
// PatientsList.tsx
const PatientsList: React.FC = () => {
const patients = useRecoilValue(patientListState);
// Rest of the component
}
// PatientCreate.tsx
const PatientCreate: React.FC = () => {
const [patients, setPatients] = useRecoilState(patientListState);
// Rest of the component
};
4. Recoilの採用メリット
Recoilを採用することで得られるメリットは以下の通りです。
- コードの可読性の向上
Stateはatom
として定義され、全てのコンポーネントから直接アクセスできます。これにより、ステートの共有やパススルーが容易になり、コードの可読性が向上します。 - 非同期データ処理の容易さ
Recoilは非同期処理を直感的に書くための機能を提供しています。これにより、非同期データの読み込みや更新を簡単に行うことができます。 - 高度な最適化
Recoilはデフォルトで最適化が行われており、大規模アプリケーションでもパフォーマンスが保たれます。
5. さいごに
以上がRecoilの基本的な使い方とメリットです。
Recoilは、そのシンプルさと強力な機能により、ReactでのState管理を大きく改善することができます。State管理に悩んでいる方は、Recoilを試してみる価値があります。
以上、RecoilによるReactのState管理について解説してきました。React学習中やポートフォリオ作成している方がRecoilを使用する際の参考になれば幸いです。
Discussion