Vue3.0 で Vuex 状態管理を開始する方法をすぐに習得します

Vue3.0 で Vuex 状態管理を開始する方法をすぐに習得します

Vuex は、Vue.js アプリケーション専用に開発された状態管理パターンです。集中型ストレージを使用してアプリケーションのすべてのコンポーネントのステータスを管理し、対応するルールを使用して、ステータスが予測可能な方法で変更されるようにします。 Vuex は Vue の公式デバッグ ツール devtools にも統合されており、ゼロ構成のタイムトラベル デバッグ、状態スナップショットのインポートとエクスポートなどの高度なデバッグ機能を提供します。
大規模なシングルページ アプリケーションを開発する予定がない場合は、Vuex の使用は面倒で冗長になる可能性があります。確かに、アプリが十分にシンプルな場合は、Vuex を使用しない方がよいでしょう。必要なのはシンプルなストアパターンだけです。ただし、中規模から大規模のシングルページ アプリケーションを構築する必要がある場合は、コンポーネント外部の状態をより適切に管理する方法を検討する可能性が高く、Vuex が自然な選択になります。

1. 状態

Vuex の状態ストレージはレスポンシブなので、ストア インスタンスから状態を読み取る最も簡単な方法は、計算プロパティで状態を返すことです。

'vue' から { computed } をインポートします
'vuex' から {useStore} をインポートします。
エクスポートデフォルト{
  設定 () {
    定数ストア = useStore()
    戻る {
      カウント: 計算された(() => store.state.count)
    }
  }
}

ゲッター

Vuex を使用すると、ストア内に「ゲッター」を定義できます (これはストアの計算されたプロパティと考えることができます)。計算プロパティと同様に、ゲッターの戻り値は依存関係に基づいてキャッシュされ、依存関係の値が変更された場合にのみ再計算されます。

'vue' から { computed } をインポートします
'vuex' から {useStore} をインポートします。
エクスポートデフォルト{
  設定 () {
    定数ストア = useStore()
    戻る {
      double: 計算された(() => store.getters.double)
    }
  }
}

突然変異

Vuex ストア内の状態を変更する唯一の方法は、ミューテーションを送信することです。 Vuex のミューテーションはイベントと非常によく似ています。各ミューテーションには、文字列イベント タイプ (type) とコールバック関数 (handler) があります。このコールバック関数は、実際に状態の変更を行う場所であり、最初の引数として状態を受け取ります。

const ストア = createStore({
  州: {
    カウント: 1
  },
  突然変異:
    増分(状態) {
      状態.count++
    }
  }
})

ミューテーション ハンドラーを直接呼び出すことはできません。このオプションは、イベント登録に似ています。「増分型のミューテーションがトリガーされたら、この関数を呼び出します。」ミューテーション ハンドラーを呼び出すには、対応する型で store.commit メソッドを呼び出す必要があります。

store.commit('増分')

アクション

アクションは、次の点を除いて、ミューテーションに似ています。
アクションは、状態を直接変更するのではなく、突然変異を送信します。
アクションには任意の非同期操作を含めることができます。

定数ストア = 新しい Vuex.Store({
  州: {
    カウント: 0
  },
  突然変異:
    増分(状態) {
      状態.count++
    }
  },
  アクション: {
    インクリメント(コンテキスト) {
      context.commit('増分')
    }
  }
})

アクションは store.dispatch メソッドによってトリガーされます。

store.dispatch('増分')

モジュール

単一の状態ツリーを使用することで、すべてのアプリケーション状態が 1 つの大きなオブジェクトに集中化されます。アプリケーションが非常に複雑になると、ストア オブジェクトが非常に肥大化する可能性があります。
上記の問題を解決するために、Vuex ではストアをモジュールに分割することができます。各モジュールには独自の状態、ミューテーション、アクション、ゲッター、さらにはネストされたサブモジュールがあり、上から下まで同じように分割されています。

定数モジュールA = {
  状態: () => ({ ... }),
  変異: { ... },
  アクション: { ... },
  ゲッター: { ... }
}
定数モジュールB = {
  状態: () => ({ ... }),
  変異: { ... },
  アクション: { ... }
}
const ストア = createStore({
  モジュール:
    a: モジュールA、
    b: モジュールB
  }
})

6. vuex の永続状態

ページを更新してプロジェクトをリロードすると、vuex がリセットされ、すべての状態が初期状態に戻ります。vuex-persistedstate を使用すると、この状況を回避できます。

1. インストール

npm インストール --save vuex-persistedstate

2. 使用

「vuex」からVuexをインポートします。
「vuex-persistedstate」からcreatePersistedStateをインポートします。
定数ストア = 新しい Vuex.Store({
  プラグイン: [createPersistedState()],
});

上記は、Vue3.0 で Vuex 状態管理をすぐに開始する方法の詳細です。Vuex 状態管理の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • Vue3 で状態管理を実装するために provide を使用する方法
  • Vue フロントエンド開発補助機能状態管理詳細例
  • vuexプロジェクトにおけるログインステータス管理の実践プロセス
  • Vueのシンプルな状態管理ストアモードを理解する方法
  • vuex での mapState の考え方の応用
  • Vueプロジェクトでvuexを使用する方法
  • vuex名前空間の使用
  • Vue の状態管理: Vuex の代わりに Pinia を使用する

<<:  CentOS7 で yum を使用して PostgreSQL と PostGIS をインストールする方法

>>:  CentOS で MySQL を完全にアンインストールする方法

推薦する

WebWorkerはJavaScriptサンドボックスの詳細をカプセル化します

目次1. シナリオ2. IJavaScriptShadowboxを実装する2.1 メインスレッドの実...

Vuexの補助関数の使い方

目次マップ状態マップゲッターマップミューテーションマップアクション複数のモジュールマップ状態 ...

Linux で仮想コンソール セッションをロックする方法

共有システムで作業しているときは、他のユーザーが自分のコンソールを覗き込んで、自分が何をしているか見...

Dockerコンテナでの静的ウェブサイトレイアウトの実装

サーバーの配置数日間無料で使用できるクラウドサーバー(Alibaba Cloud、Huawei Cl...

HTMLテキスト内のすべてのタグを置き換える方法

(?i) は大文字と小文字を区別しないことを意味します。大文字と小文字をすべて置き換えます。 htm...

MySQL データベースの手動およびスケジュールされたバックアップ手順

目次手動バックアップタイマーバックアップ手動バックアップ1) cmd コンソール: mysqldum...

JavaScript タイマー原理の詳細な説明

目次1. setTimeout() タイマー2. setTimeout() タイマーを停止する3. ...

Windows 2019 アクティベーション チュートリアル (Office2019)

数日前、Server2019の正式版がリリースされたことを知り、面白半分でインストールしてみることに...

nginx を介してローカルでリバースプロキシを構成するプロセス全体

序文Nginx は、イベント駆動型の非同期非ブロッキング処理フレームワークを使用する軽量 HTTP ...

音楽プレーヤーアプリ(アプリケーションソフトウェア)の分析と再設計 美しい音楽プレーヤーインターフェースの設計方法

無線インタラクションにずっと興味があったので、今回は実践してみようと思います〜この分析と評価は iO...

写真のプレビューとアップロード機能を実現するhtml+css+js

はじめに: Web ページを作成するときに、画像をアップロードする必要がある場合がよくあります。画像...

html、xhtml、xmlの違い

開発動向: html (ハイパーテキスト マークアップ言語) - xhtml (拡張ハイパーテキスト...

CSS 8 目を引く HOVER 効果のサンプル コード

1. エフェクトHTMLを送信する <div id="送信ボタン">...

MySQL での大規模トランザクションによって発生する挿入の遅延ケースの分析

【質問】 INSERT 文は最も一般的な SQL 文の 1 つです。最近、MySQL サーバーが同時...

IE8は優れたエクスペリエンスを提供します: アクティビティ

今日は IE8 ベータ 1 (以下、IE8 と略します) をチラ見しました。IE8 は素晴らしい体験...