概要Vuex は、Vue.js アプリケーション専用に開発された状態管理モードです (公式 Web サイト アドレス: https://vuex.vuejs.org/zh/)。集中型ストレージを使用してアプリケーションのすべてのコンポーネントのステータスを管理し、対応するルールを使用して、ステータスが予測可能な方法で変更されるようにします。 簡単に言うと、Vuex は状態管理モードであり、単純にグローバル オブジェクトとして理解できます。このグローバル オブジェクトでプロパティを変更したり、メソッドを追加したりできますが、従来の JS の直接割り当て形式で変更することはできません。Vuex が提供するルールに従って変更する必要があります。 Vuex の存在は、コンポーネント間の値転送の問題を解決するために使用されます。簡単に言えば、従来の Vue 親子コンポーネント間の値転送のトラブルや欠点から得られるメリットを確認することです。これは公式サイトに明記されています。 ヒント: この記事では、モジュールのインポートとエクスポートの形で vuex を使用します。この記事は少し長いです。辛抱強く読んでいただければ幸いです。もちろん、条件が揃っている場合は、それに従えば効果はより高くなります! Vuex の 4 つの主要オブジェクトこれらは、状態、ミューテーション、ゲッター、アクションです。 state: Vuex のデータ ソース。必要なすべての公開データはここに保存されます。これは単純に透過的なウェアハウスとして理解できます。このウェアハウスのデータ ソースには、this.$store.state. 変数名を通じてアクセスできます。 ミューテーション: ミューテーションはこのウェアハウスのキーに相当します。ミューテーションを送信することによってのみ、データ ソースを変更できます。つまり、このウェアハウスのデータを変更する場合は、ミューテーション (this.$store.commit("メソッド名")); を通じてのみ変更できます。 ゲッター: ゲッターは、vue の計算プロパティに似ています。ゲッターの戻り値は、状態に依存する値の状態変更に応じて変化します。ゲッターが依存する状態の値が変更されていない場合は、キャッシュが直接読み取られます。変更があった場合は、ここでも対応する変更が発生し、状態値の変更を監視するために使用できます。ここでのゲッターは、状態ウェアハウスの警備員として理解できます。状態のデータが変更された場合、警備員は対応する措置を講じて対応する変更を行います。変更がない場合は何も起こらず、食べ続けて死を待つことになります (ははは、比喩が適切かどうかわかりませんが、これが意味です。理解するだけで、議論しないでください) アクション: アクションはミューテーションと非常によく似ていますが、ミューテーションは正式には同期的にしか操作できませんが、アクションは非同期的に操作できます。つまり、アクションでは非同期操作を実行する必要があり、アクションは状態を直接変更するのではなく、ミューテーションを送信します。つまり、ウェアハウスに入ってデータを変更するには、まずキーを取得してから変更する必要があります。したがって、アクションはミューテーションに送信され、次にミューテーション メソッドを実行します。 状態の使用まず、新しいプロジェクトを作成し、vue 環境を構築します。ここでは詳細には触れません。結局のところ、この記事は vuex に関するものです。まず、プロジェクトに vuex をインストールします。 vuex コマンドをインストール: npm install vuex --save vuex をインストールした後、src ディレクトリに新しい vuex フォルダーを作成し、vuex フォルダーに新しい store.js ファイルを作成します。 ストア.js: 'vue' から Vue をインポートします。 'vuex' から Vuex をインポートします。 Vue.js で Vuex をビルドします。 定数状態 = { 番号:1 } デフォルトの新しいVuex.Storeをエクスポートします({ 州、 }) 次に、main.jsでstore.jsを参照し、オブジェクトをインスタンス化するときにstoreオブジェクトを追加します。 メイン.js 'vue' から Vue をインポートします './App' から App をインポートします './router' からルーターをインポートします //store.js を参照 './vuex/store' からストアをインポートします。 Vue.config.productionTip = false /* eslint を無効にする no-new */ 新しいVue({ el: '#app', ルーター、 //インスタンス化時にストアオブジェクトストアを追加します。 コンポーネント: { アプリ }, テンプレート: '<App/>' }) 次にApp.vueファイルを変更します アプリ.vue <テンプレート> <div id="アプリ"> <img src="./assets/logo.png"> // 簡単に観察できるようにビューレイヤーにデータを追加します<p>{{this.$store.state.number}}</p> </div> </テンプレート> <スクリプト> エクスポートデフォルト{ 名前: 'アプリ' } </スクリプト> <スタイル> #アプリ { フォントファミリ: 'Avenir'、Helvetica、Arial、sans-serif; -webkit-font-smoothing: アンチエイリアス; -moz-osx-font-smoothing: グレースケール; テキスト配置: 中央; 色: #2c3e50; 上マージン: 60px; } </スタイル> 上記のコードから、App.vue に p タグを追加したことがわかります。Vuex では、vuex 内のデータ、つまり状態のデータ ソース ウェアハウスを読み取る必要がある場合は、変数名 this.$store.state を介してアクセスする必要があると規定されています。 突然変異の使用vuex でデータ ソースを変更する必要がある場合は、ミューテーションを送信して変更できます。 まず、ビュー レイヤーに制御用のボタンを追加する必要があります。 アプリ <テンプレート> <div id="アプリ"> <img src="./assets/logo.png"> <p>{{$store.state.number}}</p> //データソースを変更するイベントをトリガーするボタンを追加します <button @click="add">button</button> </div> </テンプレート> <スクリプト> エクスポートデフォルト{ 名前: 'アプリ'、 方法:{ 追加(){ //データ ソースを変更するには、vuex で指定されたメソッドを使用する必要があります。this.$store.commit('addFunction'); } } } </スクリプト> <スタイル> #アプリ { フォントファミリ: 'Avenir'、Helvetica、Arial、sans-serif; -webkit-font-smoothing: アンチエイリアス; -moz-osx-font-smoothing: グレースケール; テキスト配置: 中央; 色: #2c3e50; 上マージン: 60px; } </スタイル> 次に store.js を変更します。 'vue' から Vue をインポートします。 'vuex' から Vuex をインポートします。 Vue.js で Vuex をビルドします。 定数状態 = { 番号:1 } // ミューテーションオブジェクトを追加し、状態パラメータで上記の状態を取得できます const 変異 = { addFunction(状態){ state.number+=1 を返します。 } } //ここでインスタンスに追加してください。そうしないとエラーが報告されます。export default new Vuex.Store({ 州、 突然変異 }) ミューテーションは this.$store.commit('メソッド名') を通じてデータ ソースを変更するために送信されることが直感的にわかります。もちろん、ミューテーションはパラメーターを受け取ることもできます。最初のパラメーターはミューテーションのメソッド名で、2 番目のパラメーターはミューテーションが受け取る必要のあるパラメーターです。このようにして、ミューテーションはより柔軟になります。 ゲッターの使用ゲッターは、Vue のコンピューター使用法に似ています。状態データ ソース ウェアハウス内のデータの変更を監視できます。ゲッターが依存するデータの状態が変化すると、ゲッターが依存するデータも変化し、状態も変化します。 まず、store.js に次のコードを追加します。 'vue' から Vue をインポートします。 'vuex' から Vuex をインポートします。 Vue.js で Vuex をビルドします。 定数状態 = { 番号:1 } const ゲッター = { //メソッドを通じて状態をトリガーするのは上記の状態オブジェクトであり、状態の値を読み取ることができます。addFunction(state){ state.number++ を返します。 } } デフォルトの新しいVuex.Storeをエクスポートします({ 州、 //インスタンス化するときにオブジェクトゲッターを追加することを忘れないでください }) App.vue のビューは次のように変更できます。 <テンプレート> <div id="アプリ"> <img src="./assets/logo.png"> <p>ページ値: {{$store.state.number}}</p> // ページの値と比較するタグを追加します<p>ゲッターの値: {{$store.getters.addFunction}}</p> </div> </テンプレート> <スクリプト> エクスポートデフォルト{ 名前: 'アプリ'、 } </スクリプト> <スタイル> #アプリ { フォントファミリ: 'Avenir'、Helvetica、Arial、sans-serif; -webkit-font-smoothing: アンチエイリアス; -moz-osx-font-smoothing: グレースケール; テキスト配置: 中央; 色: #2c3e50; 上マージン: 60px; } </スタイル> 上記のコードとビューレイヤーを通じて、ゲッターを操作すると、ゲッターのaddFunctionメソッドがトリガーされることがはっきりとわかります。addFunctionメソッドはstate.numberの値を変更します。このとき、numberの値はすでに2なので、ページには値が2として表示されます。++が最後にあるため、この時点でのゲッターの値は1です。つまり、ゲッターが依存するstate.numberの値がゲッター内で変更されると、state.numberも変更されます。state.numberが変更されない場合、ゲッターはまずキャッシュを読み取ります。 アクションの使用アクション オブジェクトは主に、ミューテーションに似た非同期操作を実行します。違いは、アクションはデータの状態を直接変更するのではなく、ミューテーションを送信することによってデータを変更することです。 まず、store.js のコードを変更します。 'vue' から Vue をインポートします。 'vuex' から Vuex をインポートします。 Vue.js で Vuex をビルドします。 定数状態 = { 番号:1 } const 変異 = { addFunction(状態){ state.number++ を返します。 } } const ゲッター = { addFunction(状態){ state.number++ を返します。 } } //コンテキストはストアインスタンスと同じプロパティとメソッドを持つオブジェクトです。const actions = { addFunction(コンテキスト){ コンテキストをコミットします("addFunction"); } } デフォルトの新しいVuex.Storeをエクスポートします({ 州、 突然変異、 ゲッター、 //インスタンス化するときにアクションを追加することを忘れないでください }) App.vue のコードは次のように変更されます。 <テンプレート> <div id="アプリ"> <img src="./assets/logo.png"> <p>ページ値: {{$store.state.number}}</p> <button @click="add">ボタン</button> </div> </テンプレート> <スクリプト> エクスポートデフォルト{ 名前: 'アプリ'、 方法:{ 追加(){ //アクションでは、変更のためにミューテーションを送信するには this.$store.dispatch を使用します this.$store.dispatch("addFunction") } } } </スクリプト> <スタイル> #アプリ { フォントファミリ: 'Avenir'、Helvetica、Arial、sans-serif; -webkit-font-smoothing: アンチエイリアス; -moz-osx-font-smoothing: グレースケール; テキスト配置: 中央; 色: #2c3e50; 上マージン: 60px; } </スタイル> Vuexの適用シナリオプロジェクト開発では、ショッピングカートなどの機能など、何度も読み取ったり変更したりする必要があるデータやパラメータがたくさんある場合があります。このとき、vuex を使用して実装できます。結局のところ、vuex は単なる状態管理モードです。状態管理モードは便利ですが、状態管理でできることは他のチャネルや方法でも実現できるため、必須ではありません。実際、vuex は localStorage に少し似ていると思います。どちらもページ間のデータ損失の問題を解決するためにデータを保存および変更するために使用されます。 上記はVuexの詳細を簡単に理解するための記事です。Vuexについてさらに詳しく知りたい方は、123WORDPRESS.COM内の他の関連記事もぜひご注目ください! 以下もご興味があるかもしれません:
|
<<: docker+devpi を使用してローカル pypi ソースをビルドする方法
>>: mysql5.7.20 のインストールと設定方法のグラフィック チュートリアル (mac)
01. VMware Workstation Pro 15 のダウンロードダウンロード: VMwa...
目次1. はじめに2. GitHub 3. 基本構成プロジェクトディレクトリパッケージ.json c...
Node の研究と応用を通じて、NodeJS はシングルスレッド、イベント駆動型、非ブロッキング I...
目次1. スタックの定義2. JSスタックの調査1. スタックとヒープ2. 基本型と参照型3. 値渡...
npmアンインストール sudo npm アンインストール npm -g この文に遭遇して npm ...
目次1. 現実的な背景2. 合意3. マスターを構成する3.1. 起動パラメータの設定3.2. パラ...
目次並べ替えクエリの最適化変更されたばかりのデータ行を繰り返し取得しないようにする遅延ロードされた結...
目次概要フロントエンド知識システムフロントエンドの3つの要素プレゼンテーション層 (CSS)動作レイ...
丁寧に掃除を始めましょう!未使用ボリュームの一覧docker ボリューム ls -qf dangli...
目次ブロックレベル関数オブジェクトのプロトタイプを直接変更すると呼び出された人発信者評価ブロックレベ...
MySQL ifnull のネストされた使用ifnull をネストする方法があるかどうかオンラインで...
VMware ツールは VMware の使用に非常に便利です。そのため、VMware ツールをインス...
本来の意図このツールを作った理由は、コンピューターを使用しているときにいつでも毎日の仕事や生活を記録...
そこで、この問題を解決するために埋め込みフレームワークを導入します。具体的な原則は、フォームがデータ...
序文MySQL は最も人気のあるリレーショナル データベース管理システムです。WEB アプリケーショ...