序文: 前回の記事「フロントエンドの状態管理(パート 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): テーブル ヘッダー
・【シーン説明】 HTTP1.1 以降、HTTP プロトコルは永続的な接続 (長い接続とも呼ばれます...
導入シンプルな jQuery + CSS を使用して、ブラウザのデフォルトの動作を置き換えるカスタム...
今日は何もすることがなかったので、いくつかのツール(オンラインとクライアント)、よく使用する URL...
目次ビジネス要件:解決策 1: vuex-persistedstate解決策2: vuex-pers...
ウェブ全体を検索して、さまざまな落とし穴を見つけましたが、問題は解決しませんでした。ついに自分でも分...
概要Prometheus は、HTTP プロトコルを介してリモート マシンからデータを収集し、ローカ...
導入EXISTS は、サブクエリが少なくとも 1 行のデータを返すかどうかを確認するために使用されま...
MYSQL は、MYSQL サービスやその他のコンポーネントをインストールするためのインストーラ方式...
ネットワークポートの公開実際、Docker にはネットワーク ポートの公開に関わる 2 つのパラメー...
目次1 現在のデータベースの内容を表示し、データベースをバックアップする2 bin_log関数を有効...
yum install mysql-serverと入力します。続行するにはYを押してくださいインスト...
1. フロントエンド主導の実装手順最初のステップは、ページのインポートボタンをクリックしてExcel...
目次1. プロセスの基本的な概要2. プロセスの構成要素3. プロセス環境4. プロセスステータス5...
この記事では、例を使用して、MySQL ストアド プロシージャでの case ステートメントの使用方...
目次1. Compose の紹介2. ComposeとDockerの互換性3. Dockerをインス...