vuex 액세스 값과 맵 함수 사용 설명
앞말
vuex의 실행 프로세스
구성 요소는dispatch를 통해action을 호출하고,action은commit를 통해mutation을 터치하고,mutation은state를 수정하고,state를 수정한 후에 영향을 받는dom를 다시 렌더링합니다.
설치 및 도입
1. 설치
npm install vuex -S
2. 도입
새로 만들기:store/index.js.
import vue from 'vue';
import Vuex from 'vuex';
vue.use(Vuex);
export default new Vuex.Store({
strict:true,// , state( , false)
state:{
a:1,
b:2
},
mutations:{
addA(state,val){
state.a+=val;
},
addB(state,val){
state.b+=val;
}
},
actions:{
addA({commit},val){
// mutations addA()
commit('addA', val);
},
addB({commit},val){
// mutations addB()
commit('addB', val);
}
},
// computed
getters:{
getA(state){
return state.a;
},
getB(state){
return state.b;
},
count(state){
return state.a + state.b;
}
},
modules:{
}
});
3. 마운트
import store from './store';
new Vue({
el: '#app',
store,
components: { App },
template: '<App/>'
})
활용단어참조매핑 관계
mapState > computed
mapGetters > computed
mapMutations > methods
mapActions > methods
State 및 mapState
state는 vuex의 핵심으로 데이터를 통일적으로 저장하는 곳이다.
store에서 값을 가져옵니다.(권장하지 않음)
<template>
<div>
a:{{$store.state.a}}
<br>
b:{{$store.state.b}}
</div>
</template>
공식적으로는computed를 통해 얻는 것을 추천하지만, 여러 개의 값을 얻으려면 매우 번거롭다.mapState
<template>
<div>
a:{{a}}
<br>
b:{{b}}
</div>
</template>
<script>
import {mapState} from 'vuex';
export default {
name: "MapState",
computed:{
// store.state computed
...mapState(['a','b'])
}
}
</script>
getters 및 mapGettersgetters의 값을 가져옵니다.
<div>
a:{{$store.getters.getA}}
<br>
b:{{$store.getters.getB}}
<br>
a+b={{$store.getters.count}}
</div>
mapGetters 매핑을 사용합니다.
<template>
<div>
a={{getA}}
<br>
b={{getB}}
<br>
a+b={{count}}
</div>
</template>
<script>
import {mapGetters} from 'vuex';
export default {
name: "MapGetters",
computed:{
// store.getters computed
...mapGetters(['getA','getB','count'])
}
}
</script>
mutations 및 mapMutations$store를 통해.commit에서 뮤테이션을 터치합니다.
mutation을 직접 호출하여 수정하는 것을 추천하지 않습니다.
<template>
<div>
a={{$store.state.a}}
<br>
b={{$store.state.b}}
<br>
a+b={{$store.getters.count}}
<hr>
<button @click="$store.commit('add',5)">a+5</button>
</div>
</template>
mapMutations 매핑을 사용합니다.
<template>
<div>
a={{$store.state.a}}
<br>
b={{$store.state.b}}
<br>
a+b={{$store.getters.count}}
<hr>
<button @click="addA(5)">a+5</button>
</div>
</template>
<script>
import {mapMutations} from 'vuex';
export default {
name: "MapMutations",
methods:{
// store.mutations methods
...mapMutations(['addA'])
}
}
</script>
actions 및 mapActions공식적으로는 액션을 통해mutation을 촉발하는 것을 추천합니다. 비록 비교적 번거롭지만.
action은 비동기화를 지원합니다.mutation은 동기화만 가능합니다.
$store를 통해.dispatch에서 액션을 터치합니다.
mapActions 매핑을 사용합니다.
<template>
<div>
a={{$store.state.a}}
<br>
b={{$store.state.b}}
<br>
a+b={{$store.getters.count}}
<hr>
<button @click="$store.dispatch('addA',5)">a+5</button>
</div>
</template>
<script>
import {mapActions} from 'vuex';
export default {
name: "MapActions",
methods:{
// store.actions methods
...mapMutations(['addA'])
}
}
</script>
Modules시스템이 비교적 방대할 때store는 매우 비대해진다.
Vuex는 store의 모듈화 관리를 편리하게 하기 위해 store를 모듈로 분할할 수 있도록 합니다.
모든 모듈은 자신의state,mutation,action,getter, 심지어 플러그인 모듈을 가지고 있다.
보충 지식: vuex에 데이터를 저장하고 가져오기 - 및 actions를 직접 호출합니다.js의 비동기 방법
vuex 변수에 데이터 저장
1. state에서.js에 userInfo: {},
2.actions.js에 동기화 사용자 정보 추가 - USER_에 매개변수userInfo 전달INFO
방법 만들기 - 비동기식 방법 사용하지 않기
syncUserInfo({commit}, userInfo){
commit(USER_INFO, {userInfo});
},
3. 중간 변수 mutation-type을 만듭니다.jsexport const USER_INFO = 'user_info';
4. 액션 중.js에 변수 도입 - USER_INFO
import {
USER_INFO
} from './mutation-types'
5. 돌연변이에서.js에 변수 도입
import {
USER_INFO
} from './mutation-types'
userInfo를 state에 할당
[USER_INFO](state, {userInfo}) {
state.userInfo = userInfo;
},
6. 외부에서 직접 액션을 호출한다.js의 방법 syncUserInfo
import {mapActions} from 'vuex'
methods: {
// vuex- 。 ...
...mapActions(['syncUserInfo']),
}
vuex에서 데이터 가져오기1. import {mapState} from'vuex'를 도입한다.
2. 속성 계산
computed:{
...mapState(['userInfo'])
},
vuex-중 액션을 직접 호출합니다.js의 비동기식 방법 -this.$store.dispatch
created(){
// vuex-actions - app,
this.$store.dispatch('getUserInfo')
},
actions.js
// 7.
async getUserInfo({commit}){
const result = await getUserInfo(); // actions getUserInfo --- import
console.log(result);
if(result.success_code === 200){
commit(USER_INFO, {userInfo: result.message});
}
},
actions에서 getUserInfo 메서드 호출 --- 도입 필요
import {
getUserInfo,
} from '../api'
----------------------
api-index.js
// 2.9
export const getUserInfo = () => ajax(BASE_URL + '/api/user_info');
상기 vuex 액세스 값과 맵 함수 사용 설명은 바로 여러분이 공유한 모든 내용입니다. 여러분께 참고가 되고 저희를 많이 사랑해 주시기 바랍니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Vuex의 템플릿 리터럴 유형TypeScript 4.1은 템플릿 리터럴 유형을 도입했습니다. 언뜻 보기에는 별로 흥미롭게 들리지 않습니다. 다른 유형을 기반으로 하는 리터럴 유형의 조합을 만들 수 있습니다. 그러나이 기능이 매우 유용한 경우가 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.