序文: 前回の記事「フロントエンドの状態管理(パート 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. データベース設計の3つのパラダイムに関する知識の説明1. デザインパラダイムとは何ですか?...
CentOS8 に最小限のデプロイメントで OpenStack Ussuri をインストールするため...
開発の過程では、インスタンスの vm.$refs(this.$refs) を使用して、ref で登録...
「mysqlは内部コマンドではありません」というエラーは、mysqlのbinディレクトリパスが環境変...
目次1. これからお話しするのは、フロントエンド担当者がvue-cliで完了できるソリューション、デ...
目次1 データベース インデックスを作成するための一般的なルールは次のとおりです。 2. 数千万件の...
目次ケースシナリオ問題を解決するまとめケースシナリオ本日、オンラインで問題が発見されました。監視範囲...
目次Linux - ファイル記述子、ファイルポインタ、インデックスノード1. Linux - ファイ...
mapGettersヘルパー関数mapGettersヘルパー関数は、ストア内のゲッターをローカルの計...
実験環境は以下のとおりですここでは、4 台のサーバー (1 台の nginx、負荷用の 2 台の t...
インターネット上の this.$set の説明はわかりにくいと感じます。単一データ、オブジェクト、配...
序文vue3.0 が正式にリリースされて以来、多くの友人が vue3.0 に切り替えました。ここでは...
RPM パッケージ管理インターネット ダウンロード パッケージのパッケージ化およびインストール ツー...