[TIL]Reactに関連
5912 ワード
きょう習った
動作に関連
ステータス管理ライブラリの比較
複数の親構成部品と子構成部品からなるReactでは、各構成部品でUSState Hookを使用してローカル状態を管理できます.子構成部品で使用する場合はpropsに渡すことができます.
しかし、規模がますます大きくなり、中間で使用されない素子では、値のみが伝達される非効率が生じる可能性がある.
したがって、グローバル管理ステータスのツールを使用して一緒に使用できます.
1. Redux
2. MobX
3. Context API
4. Recoil
などなど.
Reduxは、Javascriptアプリケーションのデータをグローバルに管理するためのライブラリです.
したがって、Reactに属するライブラリからではなく、ReactとReduxが両方のライブラリを使用できるように、React-Reduxというライブラリを追加します.(useDispatch, useSelector ..)
storeのグローバルステータスが格納されている場所があるので、誰も触ってはいけません.
構成部品はstoreに直接アクセスできません.stateを変更する場合は、actionを割り当ててstore内のreduceのstateを変更し、変更したstateを構成部品購読で行う必要があります.(読み取り専用)
reduceから新しい状態値を返す場合、ランダム、Dateオブジェクトへの書き込み、または非同期操作などの純粋な関数を記述する論理は使用できません.
reduceでactionを処理し、ステータスを変更する前に実行する関数.
さっきのように非同期操作もそのまま減速機ではできません!!では、サーバからデータを受信したり格納したりする場合も、直接減速機から行うことはできません.
では、どのサーバにデータを格納しますか?
代表的なミドルウェアはredux-logger、redux-thunk、redux-sagaである.
FacebookデザインのデザインモデルFluxからコンセプトを始めました.
reactに属するライブラリからではないので、他のjsライブラリ/フレームワーク環境でも使用できます.
非同期処理のためにミドルウェアを追加して構成できます.
redux devtool extension(ブラウザエクスポート)があり、デバッグが容易です.
グローバルステータス管理のほか、ローカルストレージステータスストレージ、エラーレポート添付ファイルなどの機能も提供します.
単一storeでstateを変更できるオブジェクトはreduceのみなので、デバッグが容易です.
ライブラリを追加するので、使用する依存性が1つ増えました.(ライブラリの依存性が向上)
ミドルウェアの使用概念を熟知している(reduceで直接処理できない)
context apiに比べて、作成されたコードは多く、比較的複雑です.
reduxとともに使用される一般的なステータス管理ライブラリ
基本的にmobXはクラス要素を基準に整列しています.
Hook(関数として使用する場合)を同時に使用するには、mobx-react v 6、mobx-react-liteを使用する必要があります.
観測可能な状態のデータとして観察された.Mobxでは、この状態が観察されており、変化すると応答と駆動が発生します.
Derivations(Computed values)
既存の状態が変化するにつれて計算される値を表します.
Reactions
これは,観測可能な状態の変化に伴う付加的な変化を意味し,値の変化に基づいて行うべきことを決定する.Derivationとは異なり、通常はI/Oに関連した値は生成されず、DOM更新やネットワークリクエストなどに関連しています.
Action
状態を変えるすべてを意味する.Mobxでは,すべてのユーザの動作による状態変化を「駆動」と「応答」と見なす.
特長
複数のstoreを持つ.
Decoratorを使用してコード作成を簡略化できます
オブジェクト向け
デザインが比較的簡単
redixとは異なり、observerで変更を自動的に追跡します.
単一ストレージであるため、stateオブジェクトの深さが深ければ深いほど、面倒になり、管理しにくくなります.(=>immutable.jsライブラリなどは利用できますが、それでも面倒です)
長所
シンプルなデザイン
例)
import {observable} from 'mobx';
class CounterStore {
@observable counter = 0;
increment() { this.counter++; }
decrement() { this.counter--; }
}
export default new CounterStore();
import React from 'react';
import {observer} from 'mobx-react';
import store from './store.js';
const Counter = () => (
<div>
<button onClick={() => store.increment()}>+1</button>
<span>{store.counter}</span>
<button onClick={() => store.decrement()}>-1</button>
</div>
);
export default observer(Counter);
一連の接続要素および状態の動作(mapDispatchToProps、mapStateToProps/react-reduxのhookなどを使用する)をreduxのように実行する必要がなく、このように簡単に実施することができる.ReduxのようにStateの不変性を保つ努力は必要ありません.
Reduxとは異なり、ステータスは変更可能なので危険です.
(Mobx State Tree)を使用すると、正確なデータ管理とステータスの不変性を向上させることができます.
reactに内蔵されているhookは、reactでのみ使用できます.
グローバルステータス管理機能としてのみ使用できます.(reduxに示すように、ミドルウェアには他の機能はありません)
複数のリポジトリが存在する可能性があります.
実際、Reduxはcontextapiを使用して作成されたライブラリです.
長所
依存関係を追加することなく、グローバル・ステータスを管理できます.
短所
複数のステータスがある場合は、プロバイダを重ねて置く必要があります.
stateとdispatchが変化するたびに、すべてのサブスクリプションプロバイダの構成部品がレンダリングされます.
ほとんどの大規模なサービスでは、reduxまたはmobxグローバルステータスライブラリが使用されます.
https://velog.io/@mementomori/React-%EC%83%81%ED%83%9C-%EA%B4%80%EB%A6%AC-Tool-%EC%82%AC%EC%9A%A9-%EB%B9%84%EA%B5%90-Redux-VS-MobX-VS-Context-API
https://velopert.com/3528
https://egg-programmer.tistory.com/281
https://velog.io/@cada/React-Redux-vs-Context-API#context
https://lannex.github.io/blog/2020/redux-mobx/
https://boxfoxs.tistory.com/383
https://ykss.netlify.app/react/redux_mobx_recoil/
Reference
この問題について([TIL]Reactに関連), 我々は、より多くの情報をここで見つけました https://velog.io/@jisu129/TIL-React-관련テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol