vuex でのミューテーションの使用法を理解する
この記事では主に Vue でのミューテーションの使用方法について説明します。必要な方は参考にしてください。1. ミューテーションとは何ですか?
前回の記事で述べたgetter
は、state
のデータの事前取得と簡単な処理を行うためのものです(ここでの簡単な処理ではstateのデータを変更することはできません)。 Vue のビューはデータによって駆動されます。つまり、state
のデータは動的に変化します。Vuex
でそれを変更する方法を忘れないでください。 code> store
データを変更する唯一の方法は mutation
です。
mutations
についての一般的な理解は、データを変更するためのメソッドのコレクションが含まれていることです。これは、Veux
の設計において非常に重要な点です。 Veux
でデータを処理するためのすべての論理メソッド。データとビューを分離します。 getters
是为了初步获取和简单处理state
里面的数据(这里的简单处理不能改变state里面的数据),Vue
的视图是由数据驱动的,也就是说state
里面的数据是动态变化的,那么怎么改变呢,切记在Vuex
中store
数据改变的唯一方法就是mutation
!
通俗的理解mutations
,里面装着一些改变数据方法的集合,这是Veux
设计很重要的一点,就是把处理数据逻辑方法全部放在mutations
里面,使得数据和视图分离。
2.怎么用mutations?
mutation结构:每一个mutation
都有一个字符串类型的事件类型(type
)和回调函数(handler
),也可以理解为{type:handler()},
这和订阅发布有点类似。先注册事件,当触发响应类型的时候调用handker()
,调用type
的时候需要用到store.commit
方法。
const store = new Vuex.Store({ state: { count: 1 }, mutations: { increment (state) { //注册时间,type:increment,handler第一个参数是state; // 变更状态 state.count++}}}) store.commit('increment') //调用type,触发handler(state)
载荷(payload):简单的理解就是往handler(stage)
中传参handler(stage,pryload)
;一般是个对象。
mutations: { increment (state, n) { state.count += n}} store.commit('increment', 10) mutation-types:将常量放在单独的文件中,方便协作开发。 // mutation-types.js export const SOME_MUTATION = 'SOME_MUTATION' // store.js import Vuex from 'vuex' import { SOME_MUTATION } from './mutation-types' const store = new Vuex.Store({ state: { ... }, mutations: { // 我们可以使用 ES2015 风格的计算属性命名功能来使用一个常量作为函数名 [SOME_MUTATION] (state) { // mutate state } } })
commit:提交可以在组件中使用 this.$store.commit('xxx')
提交 mutation
,或者使用 mapMutations
辅助函数将组件中的 methods
映射为 store.commit
调用(需要在根节点注入 store
)。
import { mapMutations } from 'vuex' export default { methods: { ...mapMutations([ 'increment' // 映射 this.increment() 为 this.$store.commit('increment')]), ...mapMutations({ add: 'increment' // 映射 this.add() 为 this.$store.commit('increment') })}}
3.源码分析
registerMutation
:初始化mutation
function registerMutation (store, type, handler, path = []) { //4个参数,store是Store实例,type为mutation的type,handler,path为当前模块路径 const entry = store._mutations[type] || (store._mutations[type] = []) //通过type拿到对应的mutation对象数组 entry.push(function wrappedMutationHandler (payload) { //将mutation包装成函数push到数组中,同时添加载荷payload参数 handler(getNestedState(store.state, path), payload) //通过getNestedState()得到当前的state,同时添加载荷payload参数 }) }
commit
:调用mutation
commit (type, payload, options) { // 3个参数,type是mutation类型,payload载荷,options配置 if (isObject(type) && type.type) { // 当type为object类型, options = payload payload = type type = type.type } const mutation = { type, payload } const entry = this._mutations[type] // 通过type查找对应的mutation if (!entry) { //找不到报错 console.error(`[vuex] unknown mutation type: ${type}`) return } this._withCommit(() => { entry.forEach(function commitIterator (handler) { // 遍历type对应的mutation对象数组,执行handle(payload)方法 //也就是开始执行wrappedMutationHandler(handler) handler(payload) }) }) if (!options || !options.silent) { this._subscribers.forEach(sub => sub(mutation, this.state)) //把mutation和根state作为参数传入 } }
subscribers
:订阅store
的mutation
2. 突然変異を使用するには?
変異構造: 各 mutation
には、文字列型のイベント タイプ (type
) とコールバック関数 (handler
) があります。 {type:handler()}
として理解され、サブスクリプション発行に似ています。最初にイベントを登録し、応答タイプがトリガーされたときに handker()
を呼び出します。type
を呼び出すときは、store.commit
を使用する必要があります。方法。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











JSP コメントの分類と使用状況の分析 JSP コメントは 2 つのタイプに分類されます。 単一行コメント: で終わる、単一行のコードのみコメントできます。複数行のコメント: /* で始まり */ で終わると、複数行のコードにコメントを付けることができます。単一行のコメントの例 複数行のコメントの例/**これは複数行のコメントです*コードの複数行にコメントできます*/JSP コメントの使用法 JSP コードを読みやすくするために JSP コメントを使用できます。

C 言語で exit 関数を使用する方法には、具体的なコード例が必要です。C 言語では、プログラムの実行をプログラムの初期段階で終了したり、特定の条件下でプログラムを終了したりする必要があることがよくあります。 C 言語には、この関数を実装するための exit() 関数が用意されています。この記事では、exit() 関数の使用法を紹介し、対応するコード例を示します。 exit() 関数は C 言語の標準ライブラリ関数であり、ヘッダー ファイルに含まれています。その機能はプログラムの実行を終了することであり、整数を取ることができます。

WPS は一般的に使用されるオフィス ソフトウェア スイートであり、WPS テーブル関数はデータ処理と計算に広く使用されています。 WPS テーブルには、2 つの日付間の時差を計算するために使用される、DATEDIF 関数という非常に便利な関数があります。 DATEDIF 関数は英語の DateDifference の略語で、構文は次のとおりです: DATEDIF(start_date,end_date,unit) ここで、start_date は開始日を表します。

Python 関数入門: abs 関数の使い方と例 1. abs 関数の使い方の概要 Python では、abs 関数は、指定された値の絶対値を計算するために使用される組み込み関数です。数値引数を受け入れ、その数値の絶対値を返すことができます。 abs 関数の基本構文は次のとおりです。 abs(x) ここで、x は絶対値を計算する数値パラメータであり、整数または浮動小数点数を指定できます。 2. abs 関数の例 以下に、いくつかの具体的な例を通して abs 関数の使用法を示します。 例 1: 計算

Python 関数の紹介: isinstance 関数の使用法と例 Python は、プログラミングをより便利かつ効率的にするための多くの組み込み関数を提供する強力なプログラミング言語です。非常に便利な組み込み関数の 1 つは isinstance() 関数です。この記事では、isinstance関数の使い方と例を紹介し、具体的なコード例を紹介します。 isinstance() 関数は、オブジェクトが指定されたクラスまたは型のインスタンスであるかどうかを判断するために使用されます。この関数の構文は次のとおりです

Apple ショートカット コマンドの使用方法 技術の継続的な発展により、携帯電話は人々の生活に欠かせないものになりました。数ある携帯電話ブランドの中でも、Appleの携帯電話は安定したシステムと強力な機能で常にユーザーに愛されています。その中で、Apple ショートカット コマンド機能は、ユーザーの携帯電話体験をより便利かつ効率的にします。 Apple ショートカットは、Apple が iOS12 以降のバージョン向けに開始した機能で、ユーザーがカスタム コマンドを作成して実行することで携帯電話の操作を簡素化し、より効率的な作業や作業を実現するのに役立ちます。

MySQL の ISNULL() 関数は、指定された式またはカラムが NULL かどうかを判断するために使用される関数です。ブール値、式が NULL の場合は 1、それ以外の場合は 0 を返します。 ISNULL()関数は、SELECT文やWHERE句の条件判定に使用できます。 1. ISNULL() 関数の基本構文: ISNULL(expression) ここで、expression は、NULL かどうかを判断する式です。
![Vue アプリケーションで vuex を使用するときに「エラー: [vuex] 変更ハンドラーの外で vuex ストアの状態を変更しません。」という問題を解決するにはどうすればよいですか?](https://img.php.cn/upload/article/000/000/164/168760467048976.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
Vue アプリケーションでは、vuex の使用が一般的な状態管理方法です。ただし、vuex を使用すると、「Error:[vuex]donotmutatevuexstorestateoutsidemutationhandlers」というエラー メッセージが表示されることがあります。このエラー メッセージは何を意味しますか?このエラー メッセージが表示されるのはなぜですか?このエラーを修正するにはどうすればよいですか?この記事では、この問題について詳しく説明します。エラーメッセージには次の内容が含まれます
