vuex에서 Mutations의 사용법 이해
이 글은 주로 Vue에서의 Mutations 사용법을 소개합니다. 이제 특정 참고 가치가 있습니다. 도움이 필요한 친구들이 참고할 수 있습니다.
1.
이전 글에서 언급한 getter
는 상태
의 데이터를 예비적으로 획득하고 단순 처리하기 위한 것입니다(여기서의 단순 처리로는 상태의 데이터를 변경할 수 없습니다). Vue의 뷰는 데이터에 의해 구동됩니다. 즉, 상태
의 데이터가 동적으로 변경된다는 의미입니다. 그러면 이를 변경하는 방법을 Vuex
에서 변경하는 것을 기억하세요? code> 데이터를 저장
하여 변경하는 유일한 방법은 변형
입니다! 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
돌연변이
에 대한 대중적인 이해는 데이터를 변경하기 위한 메서드 모음이 포함되어 있다는 것입니다. 이는 Veux
설계에서 매우 중요한 포인트입니다. Veux
.code>mutations 내부에서는 데이터와 뷰가 분리되어 있습니다. 2. 돌연변이를 사용하는 방법은 무엇입니까? mutation 구조: 각 mutation
에는 문자열 형식의 이벤트 유형(type
)과 콜백 함수(handler
)가 있으며, 구독 게시와 다소 유사한 {type:handler()}
로 이해됩니다. 먼저 이벤트를 등록하고, 응답 유형이 트리거되면 handker()
를 호출하세요. type
호출 시 store.commit
를 사용해야 합니다. 방법.
subscribe (fn) { const subs = this._subscribers if (subs.indexOf(fn) < 0) { subs.push(fn) } return () => { const i = subs.indexOf(fn) if (i > -1) { subs.splice(i, 1) } } }
페이로드: 간단히 이해하면 handler(stage,pryload)
매개변수를 handler(stage)
에 전달하는 것이 일반적입니다.
rrreee
🎜🎜commit: 커밋은this.$store.commit('xxx')
를 사용하여 구성 요소에서 제출하여 변형
을 제출하거나 mapMutations 보조 함수는 구성 요소의 메소드
를 store.commit
호출에 매핑합니다(store
는 루트에 삽입되어야 함). 마디). 🎜🎜🎜🎜rrreee🎜🎜🎜3. 소스 코드 분석🎜🎜registerMutation
: 초기화mutation
🎜🎜🎜🎜rrreee🎜🎜🎜commit
: mutation
🎜🎜🎜🎜rrreee🎜🎜🎜구독자
호출: store
의 mutation
🎜🎜🎜🎜 구독 rrreee🎜🎜 🎜관련 권장 사항: 🎜🎜🎜🎜vuex는 로컬 저장소를 결합하여 저장소 변경 사항을 동적으로 모니터링합니다🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜위 내용은 vuex에서 Mutations의 사용법 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제









JSP 주석 분류 및 활용 분석 JSP 주석은 두 가지 유형으로 구분됩니다. 한 줄 주석: 로 끝나는 코드로 한 줄만 주석을 달 수 있습니다. 여러 줄 주석: /*로 시작하고 */로 끝나는 경우 여러 줄의 코드에 주석을 달 수 있습니다. 한 줄 주석 예 여러 줄 주석 예/**여러 줄 주석입니다*여러 줄의 코드에 주석을 달 수 있습니다*/JSP 주석 사용 JSP 주석을 사용하여 JSP 코드에 주석을 달면 읽기 쉬워집니다.

WPS는 일반적으로 사용되는 사무용 소프트웨어 제품군이며 WPS 테이블 기능은 데이터 처리 및 계산에 널리 사용됩니다. WPS 테이블에는 두 날짜 사이의 시차를 계산하는 데 사용되는 매우 유용한 함수인 DATEDIF 함수가 있습니다. DATEDIF 함수는 영어 단어 DateDifference의 약어입니다. 구문은 다음과 같습니다. DATEDIF(start_date,end_date,unit) 여기서 start_date는 시작 날짜를 나타냅니다.

C 언어에서 종료 기능을 사용하려면 특정 코드 예제가 필요합니다. C 언어에서는 프로그램 초기에 프로그램 실행을 종료하거나 특정 조건에서 프로그램을 종료해야 하는 경우가 많습니다. C 언어에서는 이 기능을 구현하기 위해 exit() 함수를 제공합니다. 이 기사에서는 exit() 함수의 사용법을 소개하고 해당 코드 예제를 제공합니다. Exit() 함수는 C 언어의 표준 라이브러리 함수로 헤더 파일에 포함되어 있습니다. 그 기능은 프로그램 실행을 종료하는 것이며 정수를 취할 수 있습니다.

Python 함수 소개: abs 함수 사용법 및 예 1. abs 함수 사용법 소개 Python에서 abs 함수는 주어진 값의 절대값을 계산하는 데 사용되는 내장 함수입니다. 숫자 인수를 허용하고 해당 숫자의 절대값을 반환할 수 있습니다. abs 함수의 기본 구문은 다음과 같습니다: abs(x) 여기서 x는 정수 또는 부동 소수점 숫자일 수 있는 절대값을 계산하기 위한 숫자 매개변수입니다. 2. abs 함수의 예 아래에서는 몇 가지 구체적인 예를 통해 abs 함수의 사용법을 보여줍니다. 예 1: 계산

Python 함수 소개: isinstance 함수의 사용법 및 예 Python은 프로그래밍을 보다 편리하고 효율적으로 만들기 위해 많은 내장 함수를 제공하는 강력한 프로그래밍 언어입니다. 매우 유용한 내장 함수 중 하나는 isinstance() 함수입니다. 이 기사에서는 isinstance 함수의 사용법과 예를 소개하고 구체적인 코드 예를 제공합니다. isinstance() 함수는 객체가 지정된 클래스나 유형의 인스턴스인지 여부를 확인하는 데 사용됩니다. 이 함수의 구문은 다음과 같습니다

Apple 단축키 명령 사용 방법 지속적인 기술 발전으로 휴대폰은 사람들의 삶에 없어서는 안될 부분이 되었습니다. 수많은 휴대폰 브랜드 중에서도 Apple 휴대폰은 안정적인 시스템과 강력한 기능으로 늘 사용자들의 사랑을 받아왔습니다. 그 중 Apple 단축키 명령 기능은 사용자의 휴대폰 경험을 더욱 편리하고 효율적으로 만들어줍니다. Apple Shortcuts는 Apple이 iOS12 이상 버전을 위해 출시한 기능으로, 사용자 정의 명령을 생성하고 실행하여 보다 효율적인 작업을 수행하고 휴대폰 작업을 단순화하는 데 도움이 됩니다.

MySQL의 ISNULL() 함수는 지정된 표현식이나 열이 NULL인지 여부를 확인하는 데 사용되는 함수입니다. 부울 값을 반환하며, 표현식이 NULL이면 1, 그렇지 않으면 0을 반환합니다. ISNULL() 함수는 SELECT 문이나 WHERE 절의 조건부 판단에 사용할 수 있습니다. 1. ISNULL() 함수의 기본 구문: ISNULL(expression) 여기서 표현식은 NULL인지 또는 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를 사용할 때 "오류:[vuex]donotmutatevuexstorestateoutsidemutationhandlers"와 같은 오류 메시지가 나타날 수 있습니다. 이 오류 메시지는 무엇을 의미합니까? 이 오류 메시지가 나타나는 이유는 무엇입니까? 이 오류를 해결하는 방법은 무엇입니까? 이 기사에서는 이 문제를 자세히 다룰 것입니다. 오류 메시지에는 다음이 포함됩니다.
