ホームページ > ウェブフロントエンド > jsチュートリアル > vue の管理モード vuex の詳細な解釈

vue の管理モード vuex の詳細な解釈

亚连
リリース: 2018-06-23 15:28:10
オリジナル
1887 人が閲覧しました

この記事では、主に Vue の状態管理モデル vuex について詳しく紹介します。これが非常に優れていると思いますので、参考にしてください。エディターに従って見てみましょう。

vuex は vue.js 用に特別に設計された状態管理モードであり、devtools を使用してデバッグすることもできます。

注: この記事の例とその他のコードでは、es6 構文を使用します。

リンク

  1. vuex公式中国語ウェブサイト

  2. vueとvuexを使用して実装された簡単なモール、参考のみ

vuexとは何ですか?

vuex 公式 Web サイトからの最初の引用:

Vuex は、Vue.js アプリケーション専用に開発された状態管理モデルです。集中ストレージを使用してアプリケーションのすべてのコンポーネントのステータスを管理し、対応するルールを使用してステータスが予測可能な方法で変化することを保証します。

状態管理モードと集中ストレージ管理は、一見すると非常にハイエンドで恐ろしいように聞こえます。私の意見では、vuex は共有する必要があるすべての変数をオブジェクトに保存し、このオブジェクトを他のコンポーネントが使用できるように最上位コンポーネントに配置します。このように言えば、vue を js ファイル、コンポーネントを関数と考えると、vuex はグローバル変数ですが、この「グローバル変数」にはいくつかの特定のルールが含まれています。

Vue のコンポーネント開発では、現在のコンポーネントのステータスを他のコンポーネントに渡す必要があることがよくあります。親コンポーネントと子コンポーネントの間で通信するときは、通常、props + Emit を使用します。しかし、通信する相手が親子コンポーネントでなかったり、まったく関係がなかったり、複数のコンポーネントで状態を共有する必要がある場合は、非常に面倒でデータの維持も非常に難しくなり、非常に不親切です。私たちの発展に。 vuex は現時点では非常に実用的ですが、vuex を使用すると、より多くの概念やフレームワークも導入されるため、注意が必要です。

vuex には何がありますか?

話は簡単です、コードを見せてください:

const store = new Vuex.Store({
  state: {
    name: 'weish',
    age: 22
  },
  getters: {
    personInfo(state) {
      return `My name is ${state.name}, I am ${state.age}`;
    }
  }
  mutations: {
    SET_AGE(state, age) {
      commit(age, age);
    }
  },
  actions: {
    nameAsyn({commit}) {
      setTimeout(() => {
        commit('SET_AGE', 18);
      }, 1000);
    }
  },
  modules: {
    a: modulesA
  }
}
ログイン後にコピー

これは最も基本的で完全な vuex コードです。vuex には 5 つの基本オブジェクトが含まれています:

  1. state :保管状況。つまり、変数

  2. ゲッター: 派生状態。つまり、get in set と get には、state と getters という 2 つのオプションのパラメーターがあり、それぞれ state 内の変数と他の getter を取得できます。外部呼び出しメソッド:store.getters.personInfo()。これは、vue の計算された

  3. のミューテーションに似ています。ステータスの変更を送信します。つまり、set と get は vuex で状態を変更する唯一の方法ですが、非同期操作はサポートされていません。最初のパラメータのデフォルトは state です。外部呼び出しメソッド:store.commit('SET_AGE', 18)。 vue のメソッドと似ています。

  4. アクション: 突然変異に似ています。ただし、アクションは非同期操作をサポートします。最初のパラメータのデフォルトは、ストアと同じパラメータ属性を持つオブジェクトです。外部呼び出しメソッド:store.dispatch('nameAsyn')。

  5. モジュール: ストアのサブモジュール。コンテンツはストアのインスタンスに相当します。呼び出しメソッドは、store.a.getters.xxx() のように、現在のサブモジュール名を追加する必要があることを除いて、前に紹介したメソッドと似ています。

vue-cliでのvuexの使い方

実際の開発ではvue-cliを使用するのが一般的ですが、vue-cliでは開発方法や呼び出し方法が少し異なります。

├── index.html
├── main.js
├── components
└── store
  ├── index.js     # 我们组装模块并导出 store 的地方
  ├── state.js     # 跟级别的 state
  ├── getters.js    # 跟级别的 getter
  ├── mutation-types.js # 根级别的mutations名称(官方推荐mutions方法名使用大写)
  ├── mutations.js   # 根级别的 mutation
  ├── actions.js    # 根级别的 action
  └── modules
    ├── m1.js     # 模块1
    └── m2.js     # 模块2
ログイン後にコピー

state.js の例:

const state = {
  name: 'weish',
  age: 22
};

export default state;
ログイン後にコピー

getters.js の例 (通常、状態を直接使用するのではなく、ゲッターを使用して状態の状態を取得します):

export const name = (state) => {
  return state.name;
}

export const age = (state) => {
  return state.age
}

export const other = (state) => {
  return `My name is ${state.name}, I am ${state.age}.`;
}
ログイン後にコピー

mutation-type.js の例 (すべてのミューテーションを使用します)このファイル内の関数名):

export const SET_NAME = 'SET_NAME';
export const SET_AGE = 'SET_AGE';
ログイン後にコピー

mutations.js の例:

import * as types from './mutation-type.js';

export default {
  [types.SET_NAME](state, name) {
    state.name = name;
  },
  [types.SET_AGE](state, age) {
    state.age = age;
  }
};
ログイン後にコピー

actions.js の例 (非同期操作、複数のコミットの場合):

import * as types from './mutation-type.js';

export default {
  nameAsyn({commit}, {age, name}) {
    commit(types.SET_NAME, name);
    commit(types.SET_AGE, age);
  }
};
ログイン後にコピー

modules--m1.js の例 (非常に複雑なアプリケーションではない場合) 、一般的にはモジュールに分割されません):

export default {
  state: {},
  getters: {},
  mutations: {},
  actions: {}
};
ログイン後にコピー

index.jsの例(vuexの組み立て):

import vue from 'vue';
import vuex from 'vuex';
import state from './state.js';
import * as getters from './getters.js';
import mutations from './mutations.js';
import actions from './actions.js';
import m1 from './modules/m1.js';
import m2 from './modules/m2.js';
import createLogger from 'vuex/dist/logger'; // 修改日志

vue.use(vuex);

const debug = process.env.NODE_ENV !== 'production'; // 开发环境中为true,否则为false

export default new vuex.Store({
  state,
  getters,
  mutations,
  actions,
  modules: {
    m1,
    m2
  },
  plugins: debug ? [createLogger()] : [] // 开发环境下显示vuex的状态修改
});
ログイン後にコピー

最後に、vueコンポーネント内のmain.js

import store from './store/index.js';

new Vue({
 el: '#app',
 store,
 render: h => h(App)
});
ログイン後にコピー

にストアインスタンスをvueにマウントするだけです通常、mapGetters、mapActions、mapMutations を使用します。その後、vue がメソッドを呼び出して計算するのと同じ方法でこれらの変数または関数を呼び出すことができます。例は次のとおりです。

import {mapGetters, mapMutations, mapActions} from 'vuex';

/* 只写组件中的script部分 */
export default {
  computed: {
    ...mapGetters([
      name,
      age
    ])
  },
  methods: {
    ...mapMutations({
      setName: 'SET_NAME',
      setAge: 'SET_AGE'
    }),
    ...mapActions([
      nameAsyn
    ])
  }
};
ログイン後にコピー

上記は、私が皆さんのためにコンパイルしたものです。今後、皆様のお役に立つことを願っております。

関連記事:

JavaScriptにおけるパフォーマンス最適化の詳しい解釈

vue.jsでのデフォルトルートが読み込まれない問題について

jsを使ってタイムスタンプと日付形式を変換する方法

Vue の応答性の原則 (詳細なチュートリアル)

以上がvue の管理モード vuex の詳細な解釈の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート