ホームページ WeChat アプレット ミニプログラム開発 Vuex のモジュラー (モジュール) サンプルの詳細な説明

Vuex のモジュラー (モジュール) サンプルの詳細な説明

Jan 31, 2018 pm 01:47 PM
module vuex モジュラー

この記事では、主に Vuex のモジュール性について紹介します。これが非常に優れていると思いますので、参考にしていただければ幸いです。

1. モジュール化が必要な理由

先ほど説明した例はすべてステート ツリーで実行され、プロジェクトが比較的大きい場合、すべてのステートが集められて比較的大きなオブジェクトが表示されます。肥大化し、維持するのが困難です。この問題を解決するために、Vuex ではストアをモジュールに分割することができ、各モジュールには独自の状態、ミューテーション、アクション、ゲッターがあり、モジュールを下方向にネストすることもできます

const moduleA = {
 state: {....},
 mutations: {....},
 actions: {....},
 getters: {....}
}

const moduleB = {
 state: {....},
 mutations: {....},
 actions: {....},
 getters: {....}
}

const store = new Vuex.Store({
 modules: {
 a: moduleA,
 b: moduleB
 }
})

store.state.a // moduleA的状态
store.state.b // moduleB的状态
ログイン後にコピー

2。モジュールのローカル状態

モジュール内の突然変異とゲッター、受け取った最初のパラメーター (状態) は、モジュールのローカル状態オブジェクト、rootState です

const moduleA = {
 state: { count: 0},
 mutations: {
 increment (state) {
  // state是模块的局部状态,也就是上面的state
  state.count++
 }
 },
 getters: {
 doubleCount (state, getters, rootState) {
  // 参数 state为当前局部状态,rootState为根节点状态
  return state.count * 2
 }
 },
 actions: {
 incremtnIfOddRootSum ( { state, commit, rootState } ) {
  // 参数 state为当前局部状态,rootState为根节点状态
  if ((state.cont + rootState.count) % 2 === 1) {
  commit('increment')
  }
 }
 }
}
ログイン後にコピー

3. 名前空間 (必ずここを読んでください。そうでない場合は、上記のすべての例では、 moduleA で同じ名前のアクション、ミューテーション、またはゲッター (some と呼ばれる) を宣言すると、モジュール内のアクション、ミューテーション、ゲッターがグローバル名前空間に登録されます。 store.commit('some') を使用すると、モジュール A とモジュール B が同時に応答します。したがって、モジュールをより自己完結型で再利用可能にしたい場合は、namespaced: true を追加して名前空間モジュールにすることができます。モジュールが登録されると、そのすべてのゲッター、アクション、およびミューテーションは、モジュールによって登録されたパスに従って自動的に名前全体を呼び出します。 例:

const store = new Vuex.Store({
 modules: {
 account: {
  namespaced: true,
  state: {...}, // 模块内的状态已经是嵌套的,namespaced不会有影响
  getters: {  // 每一条注释为调用方法
  isAdmin () { ... } // getters['account/isAdmin']
  },
  actions: {
  login () {...} // dispatch('account/login')
  },
  mutations: {
  login () {...} // commit('account/login')
  },
  modules: {  // 继承父模块的命名空间
  myPage : {
   state: {...},
   getters: {
   profile () {...}  // getters['account/profile']
   }
  },
  posts: { // 进一步嵌套命名空间
   namespaced: true,
   getters: {
   popular () {...} // getters['account/posts/popular']
   }
  }
  }
 }
 }
})
ログイン後にコピー

名前空間を有効にするゲッターとアクションは、ローカライズされたゲッター、ディスパッチ、そしてコミットします。モジュール コンテンツを使用するときに同じモジュールにスペース名プレフィックスを追加する必要はありません。また、namespaced 属性を変更した後にモジュール内のコードを変更する必要もありません。

4. 名前空間モジュールのグローバル コンテンツ (グローバル アセット) にアクセスします

グローバル状態とゲッターを使用する場合は、rootState と rootGetter が 3 番目と 4 番目のパラメーターとしてゲッターに渡され、コンテキスト オブジェクトのプロパティを使用して、アクションを配布するか、アクションに入るときにグローバル名前空間でミューテーションを送信する必要がある場合は、ディスパッチまたはコミットする 3 番目のパラメーターとして { root: true } を渡すだけです。

modules: {
 foo: {
 namespaced: true,
 getters: {
  // 在这个被命名的模块里,getters被局部化了
  // 你可以使用getter的第四个参数来调用 'rootGetters'
  someGetter (state, getters, rootSate, rootGetters) {
  getters.someOtherGetter // -> 局部的getter, ‘foo/someOtherGetter'
  rootGetters.someOtherGetter // -> 全局getter, 'someOtherGetter'
  }
 },
 actions: {
  // 在这个模块里,dispatch和commit也被局部化了
  // 他们可以接受root属性以访问跟dispatch和commit
  smoeActino ({dispatch, commit, getters, rootGetters }) {
  getters.someGetter // 'foo/someGetter'
  rootGetters.someGetter // 'someGetter'
  dispatch('someOtherAction')  // 'foo/someOtherAction'
  dispatch('someOtherAction', null, {root: true}) // => ‘someOtherAction'
  commit('someMutation') // 'foo/someMutation'
  commit('someMutation', null, { root: true }) // someMutation
  }
 }
 }
}
ログイン後にコピー

5. 名前空間を使ったバインディング関数

前に述べたように、名前空間を取得した後、呼び出すときに名前空間を記述する必要がありますが、特に複数レベルのネストが含まれる場合、これはさらに面倒です (もちろん開発はネストしないでください)多すぎるとめまいがします。)


一般的な書き方を見てみましょう

computed: {
 ...mapState({
 a: state => state.some.nested.module.a,
 b: state => state.some.nested.module.b
 }),
 methods: {
 ...mapActions([
  'some/nested/module/foo',
  'some/nested/module/bar'
 ])
 }
}
ログイン後にコピー

この場合、モジュールの名前空間を最初のパラメータとして上記の関数に渡すことができ、すべてのバインドが自動的に行われます。コンテキストとして使用されます。簡略化した書き方は

computed: {
 ...mapStates('some/nested/module', {
 a: state => state.a,
 b: state => state.b
 })
},
methods: {
 ...mapActions('some/nested/module',[
 'foo',
 'bar'
 ])
}
ログイン後にコピー

6. モジュールの再利用

場合によっては、モジュールの複数のインスタンスを作成することがあります。例:

    複数のストアを作成し、それらはモジュールを共有します
  • 同じモジュールをストアに複数回登録しますモジュール

  • 純粋なオブジェクトを使用してモジュールの状態を宣言すると、この状態オブジェクトは参照を通じて共有され、データが互いに汚染されてしまいます。
実際、Vue コンポーネント内のデータも同じ問題を抱えているため、解決策は同じです。モジュールのステータスを宣言する関数を使用します (2.3.0 以降でサポート)

const MyModule = {
 state () {
 return {
  foo: 'far'
 }
 }
}
ログイン後にコピー

7. まとめ

の内容今回はモジュールが登場する理由、使い方、グローバルとローカルの名前空間を持つモジュールの名前空間、グローバルコンテンツへのローカルアクセス、マップ関数の名前空間とのバインディング機能、モジュールの再利用を中心に説明します。

引用

https://vuex.vuejs.org Vuex公式ドキュメント

関連推奨事項:


vuex2.0モジュール例の詳細な説明

vm.$nextTickインスタンスの詳細を使用したVue + Vuexの詳細な説明

簡単な vuex とモジュール化を学びましょう

以上がVuex のモジュラー (モジュール) サンプルの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Java コードの保守性を最適化する方法: 経験とアドバイス Java コードの保守性を最適化する方法: 経験とアドバイス Nov 22, 2023 pm 05:18 PM

Java コードの保守性を最適化する方法: 経験とアドバイス ソフトウェア開発プロセスでは、保守性の高いコードを作成することが重要です。保守性とは、予期せぬ問題や追加の労力を引き起こすことなく、コードを簡単に理解、変更、拡張できることを意味します。 Java 開発者にとって、コードの保守性を最適化する方法は重要な問題です。この記事では、Java 開発者がコードの保守性を向上させるのに役立ついくつかの経験と提案を共有します。標準化された命名規則に従うと、コードが読みやすくなります。

Python コードのコード複雑さのエラーを解決するにはどうすればよいですか? Python コードのコード複雑さのエラーを解決するにはどうすればよいですか? Jun 24, 2023 pm 05:43 PM

Python はシンプルで習得が簡単で効率的なプログラミング言語ですが、Python コードを作成すると、コードが過度に複雑になるため問題が発生する場合があります。これらの問題が解決されない場合、コードの保守が困難になり、エラーが発生しやすくなり、コードの可読性とスケーラビリティが低下します。そこで、この記事では、Python コードのコード複雑さのエラーを解決する方法について説明します。コードの複雑さについて コードの複雑さは、理解と保守が難しいコードの性質を表す尺度です。 Pythonでは使用できるインジケーターがいくつかあります

Python コードの保守性が悪いエラーを解決するにはどうすればよいですか? Python コードの保守性が悪いエラーを解決するにはどうすればよいですか? Jun 25, 2023 am 11:58 AM

Python は高級プログラミング言語として、ソフトウェア開発で広く使用されています。 Python には多くの利点がありますが、多くの Python プログラマーがよく直面する問題は、コードの保守性が低いことです。 Python コードの保守性には、コードの読みやすさ、拡張性、再利用性が含まれます。この記事では、Python コードの保守性が低いという問題を解決する方法に焦点を当てます。 1. コードの可読性 コードの可読性とは、コードの可読性を指し、コードの保守性の核心となります。

ModuleNotFoundError: Python モジュールが見つからないエラーを解決するには? ModuleNotFoundError: Python モジュールが見つからないエラーを解決するには? Jun 25, 2023 pm 09:30 PM

Python の開発プロセスでは、モジュールが見つからないというエラーがよく発生します。このエラーの具体的な症状は、モジュールのインポート時に Python が ModuleNotFoundError または ImportError の 2 つのエラーのいずれかを報告することです。このエラーは非常に厄介で、プログラムが適切に実行されなくなる可能性があるため、この記事では、このエラーの原因とその解決方法を検討します。 Pyth の ModuleNotFoundError と ImportError

Vue アプリケーションで vuex を使用するときに「エラー: [vuex] 変更ハンドラーの外で vuex ストアの状態を変更しません。」という問題を解決するにはどうすればよいですか? Vue アプリケーションで vuex を使用するときに「エラー: [vuex] 変更ハンドラーの外で vuex ストアの状態を変更しません。」という問題を解決するにはどうすればよいですか? Jun 24, 2023 pm 07:04 PM

Vue アプリケーションでは、vuex の使用が一般的な状態管理方法です。ただし、vuex を使用すると、「Error:[vuex]donotmutatevuexstorestateoutsidemutationhandlers」というエラー メッセージが表示されることがあります。このエラー メッセージは何を意味しますか?このエラー メッセージが表示されるのはなぜですか?このエラーを修正するにはどうすればよいですか?この記事では、この問題について詳しく説明します。エラーメッセージには次の内容が含まれます

Vuex を使用して Vue2.x のグローバル状態を管理するためのベスト プラクティス Vuex を使用して Vue2.x のグローバル状態を管理するためのベスト プラクティス Jun 09, 2023 pm 04:07 PM

Vue2.x は現在最も人気のあるフロントエンド フレームワークの 1 つであり、グローバル状態を管理するためのソリューションとして Vuex を提供します。 Vuex を使用すると、状態管理がより明確になり、保守が容易になります。開発者が Vuex をより適切に使用し、コードの品質を向上させるために、Vuex のベスト プラクティスを以下に紹介します。 1. モジュラー組織状態の使用 Vuex は単一の状態ツリーを使用してアプリケーションのすべての状態を管理し、コンポーネントから状態を抽出することで、状態管理をより明確かつ理解しやすくします。多くの状態を持つアプリケーションではモジュールを使用する必要があります

Vue3 で Vuex を使用する方法 Vue3 で Vuex を使用する方法 May 14, 2023 pm 08:28 PM

Vuexは何をするのですか? Vue 公式: 状態管理ツール 状態管理とは? 複数のコンポーネント間で共有する必要があり、1 つの変更ですべてが変更される、応答性の高い状態。たとえば、グローバルに使用されるステータス情報: ユーザーのログイン ステータス、ユーザー名、地理的位置情報、ショッピング カート内の商品など。現時点では、グローバル ステータス管理のためのこのようなツールが必要であり、Vuex はそのようなツールです。単一ページの状態管理 ビュー –> アクション –> 状態 ビュー レイヤ (ビュー) は、アクション (アクション) をトリガーして状態 (state) を変更し、ビュー レイヤ (ビュー) vuex (Vue3.

Vue アプリケーションで vuex を使用するときに「エラー: [vuex] 不明なアクション タイプ: xxx」という問題を解決するにはどうすればよいですか? Vue アプリケーションで vuex を使用するときに「エラー: [vuex] 不明なアクション タイプ: xxx」という問題を解決するにはどうすればよいですか? Jun 25, 2023 pm 12:09 PM

Vue.js プロジェクトでは、vuex は非常に便利な状態管理ツールです。これは、複数のコンポーネント間で状態を共有するのに役立ち、状態の変更を管理する信頼性の高い方法を提供します。ただし、vuex を使用すると、「エラー:[vuex]unknownact​​iontype:xxx」というエラーが発生することがあります。この記事では、このエラーの原因と解決策について説明します。 1. エラーの原因 vuex を使用する場合、いくつかのアクションと mu を定義する必要があります。

See all articles