序文: 前回の記事「フロントエンドの状態管理(パート 1)」に引き続き、これほど多くの読者が注目するとは思っていませんでした。皆さんのサポートと提案に感謝します。ここでは、個人的な意見や考えを述べているだけなので、十分に網羅的ではないかもしれません。Vue の使用例は単なるガイドであり、Vue にも高い注目度があります。友人の中には、Vuex 以外のソリューションを聞きたいという人もいます。今日は、Redux から始めて、徐々に拡張していきます (タイトルの通り)。 1. 再出発
Redux の基本的な操作は、おおよそ次のようになります。
1.1. ストア(司書) 'redux' から {createStore} をインポートします。 const store = createStore(リデューサー); 1.2. 状態(書籍) 'redux' から {createStore} をインポートします。 const ストア = createStore(リデューサー) ストア.getState() 1.3. アクション(図書貸出リスト)本を借りたい場合はどうすればいいですか?もちろん、図書貸出リストを管理者に提出する必要があります。すると、ユーザーは 定数アクション = { タイプ: 'クリック'、 情報: '借用リストを送信' } 1.4、store.dispatch (貸出リストの送信) store.dispatch(アクション) 1.5. リデューサー(書籍のパッケージング) const リデューサー = (状態、アクション) => { return `action.info: ${state}` // => 借用リストを送信: 紅楼夢} store.subscribe (書籍を受け取る) 状態が変化すると、store.subscribe() がそれをリッスンし、View を自動的に更新します。 const 購読解除 = store.subscribe(() => { 与える() { // ビューを更新する } }) // 購読を解除することもできます(聞く) 登録解除() まとめ:
なぜこれをやるべきなのかについては、前回の記事ですでに述べました。その重要性は、アプリケーションのテスト、エラー診断、 2. 国家管理の目的実際、ほとんどのプログラマーが Redux を使用する最も一般的なシナリオは、ページ A からページ B に戻り、ページ B のステータスを保存する必要があることです。 プロジェクトが大きくない場合、 しかし残念ながら、 図書館を例に考えてみましょう。現在、図書館管理システムがあります。一覧ページ(list)から 使用するテクノロジー スタックが ( //KeepAlive.js デフォルト関数keepAliveWrapper()をエクスポートする{ 関数keepAlive(WrappedComponent)を返す{ 戻りクラスKeepAliveはWrappedComponentを拡張します{ // ps コンストラクタ(props) { スーパー(小道具) // 何かを実行する... } コンポーネントマウント() { 定数{ キープアライブ: { フィールド値 }, } = this.context // 何かを実行する... super.componentDidMount() } 与える() { // 何かを実行する... super.render() を返す } } } } 元のコンポーネントを継承する必要がある理由は次のとおりです 従来の記述方法でクラスコンポーネント( // main.jsx ルートコンポーネント import React from 'react' const appContext = React.createContext() クラスAppはReact.Componentを拡張します。 コンストラクタ(props) { スーパー(小道具) この状態 = { keepAlive: {}, // キャッシュオブジェクト isCache: false, // キャッシュするかどうか fieldsValue: {} // フォームの値をキャッシュする } } コンポーネントマウント() { // 初期化 const keepAlive = { isCache: this.state.isCache、 トグル: this.toggleCache.bind(this), フィールド値: this.state.fieldsValue、 } this.setState({keepAlive}) を実行します。 } // レンダリング警告を防ぐために状態をクリアするメソッドです (レンダリング前にフィールドを設定することはできません...) // たとえば、list1 => list1/detail => list2 では、次のコールバックにジャンプを配置し、ステータスをクリアする必要があります。toggleCache(isCache = false, payload, callback) { const { fieldsValue = null } = ペイロード 定数キープアライブ = { キャッシュ、 フィールド値、 トグル: this.toggleCache.bind(this), } const fn = typeof callback === 'function' ? callback() : void 0 this.setState() は、 { キープアライブ、 }, () => { 注釈 } ) } 与える() { const { キープアライブ } = this.state <appContext.Provider 値 = {{ keepAlive }}> // あなたのルート... </appContext.Provider> } }
// ページで使用する場合は 'react' から React をインポートします '../keepAlive' から keepAlive をインポートします // keepAlive は元のコンポーネントに最も近い場所に配置する必要があります @keepAlive() クラスAppはReact.Componentを拡張します。 コンストラクタ(props){ スーパー(小道具) この状態 = { // 何かを初期化します... } } コンポーネントマウント() { // 何かをする... if(this.context.keepAlive.fieldsValue) { const { tableList } = this.context.keepAlive.fieldsValue console.log('Cached:',tableList) // キャッシュ: ['1', '2'] } } // 詳細を表示 detail = () => { this.context.keepAlive.fieldsValue = { テーブルリスト: ['1', '2'] } // ジャンプ... } // list1 => list1/detail (次のメソッドは詳細ページにあるはずです) => list2 のように、第 1 レベルのルートをジャンプする必要がある場合は、警告 toList2 = () => { を処理する必要があります。 this.context.keepAlive.toggle(false, {}, () => { // ジャンプ... }) } } 上記ではデコレータ記述を使用していますが、簡単に言うと、以下の { "コンパイラオプション": { "実験的デコレータ": true }, 「除外」: [ 「ノードモジュール」、 「距離」 ] } .babelrc で設定します: { 「プラグイン」: [ "@babel/プラグイン提案デコレータ", { 「レガシー」: 真 } ] } 上記の方法は、先ほど述べたシナリオに適しています (ページ A からページ B に戻るには、ページ B の状態を保存する必要があります)。Redux または 要約: フロントエンドステータス管理に関するこの記事はこれで終わりです。フロントエンドステータス管理に関するその他のコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 前回の記事のレビュー: フロントエンドの状態管理についての簡単な説明 (パート 1) 以下もご興味があるかもしれません:
|
>>: HTML テーブル マークアップ チュートリアル (18): テーブル ヘッダー
原因最近、プロジェクトのリファクタリングを始めたのですが、マスタースレーブと読み取り書き込み分離を使...
1. MS SQL Server 2005 --1. ログをクリアするexec('DUMP...
Canal は、Java を使用して開発された Alibaba のオープンソース プロジェクトです...
オンラインで検索して重複データを削除し、ID が最小のデータだけを残します。方法は次のとおりです。 ...
解決すべき問題主にコンポーネント間のクロスレベル通信用なぜディスパッチとブロードキャストを自分で実装...
MySql インデックスの詳細な紹介と正しい使用方法1. はじめに:インデックスはクエリ速度に重大な...
目次uni-app のスタイル要約するuni-app のスタイルsassプラグインは公式ウェブサイト...
目次1. NodeがHTTPサーバーを構築する2. HTTPサーバーがリクエストを取得する1. Po...
ユーザー組織には、ドメインに参加している 2 台の Windows Server 2008 R2 フ...
JavaScript では、要素の removeAttribute() メソッドを使用して、指定され...
この記事では、jQueryでカルーセルチャートを実装するための具体的なコードを参考までに共有します。...
環境: VMware VCSA 6.7 (VMware-VCSA-all-6.7.0-8169922...
デフォルトでは、Nginx は IP アドレスごとに 1 つの SSL 証明書のみをサポートします。...
HTML <dl> タグ#定義と使用法<dl> タグは定義リストを定義します...
Web ページでマスク レイヤーを使用すると、繰り返しの操作を防ぎ、読み込みを促進できます。また、ポ...