Warning: count(): Parameter must be an array or an object that implements Countable in /home/xs638785/agile-software.site/public_html/wp-content/plugins/rich-table-of-content/functions.php on line 490
アプリケーション制作においてstate
を管理することは大事です。Reactでstate
管理と言ったらすぐuseState
が頭の中に浮かびますね。確かにuseState
でstate
を全部管理することもできます。
しかし、useState
で管理してるstateをたくさんのコンポーネントで使っているとしたら以下のようになります。
あるコンポーネントでstate
の変更が起こり、そのstate
を使ってる他のコンポーネントに変更を伝える図です。
state
は別途ストレージみたいなところで一括で管理すると楽と思うかもしれません。それがReduxとContext APIがやってることです。
Redux
https://www.agile-software.site/2021/08/06/redux%e3%81%a8%e3%81%af/Context API
https://www.agile-software.site/2022/07/17/context-api/ReduxとContext APIの違い
Reduxはライブラリです。Reactと一緒に使われる場合が多いですが、Reactではないフレームワーク(Vueなど)でも使えます。
Context APIはReactに搭載されている機能です。当たり前にReactではないと使えません。
メインストレージの数
Reduxのstore
は一つだけです。この一つのstore
ですべてのstate
を管理します。ロジックを分けたい場合は機能ごとにreducer
を分けます。例えツイッターを作るとしたら「ユーザーに関するreducer
」、「投稿に関するreducer
」などになりそうです。
Context APIのcontext
は複数作れます。ですので、機能ごとにcontext
を生成することになります。ツイッターの例だったら「ユーザーに関するcontext
」、「投稿に関するcontext
」などでしょう。
Middleware
Reduxの基本概念でaction
がreducer
に送られると話しました。Middlewareを使うとこのaction
がreducer
で処理される前に他の作業を追加することができます。例えば、
などなどです。Middlewareはよく非同期処理を扱う時に使われ、便利機能を提供してくれます。
action
をconsoleに表示する(もしくはサーバー側でロギング)- 特定の条件では
action
を無視する - 特定の
action
が発生したらjavascriptの関数を実行させる - 特定の
action
が発生したら他のaction
も発生させる
context APIはMiddleware使えないので、このような非同期処理の機能は全部直接実装することになるのでしょう。