반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 이안의평일코딩
- ReactNative
- 자스코테
- 정보처리기사실기
- 자바스크립트 코딩테스트
- 정보처리기사
- 자바의정석
- 정보처리기사정리
- typescript
- 정보처리기사실기요약
- 타입스크립트
- 정보처리기사실기정리
- VUE
- react
- 리액트
- javascript
- 스프링
- 코딩테스트
- CSS
- 국비IT
- Oracle
- 자바스크립트
- 정보처리기사요약
- 국비코딩
- spring
- 평일코딩
- 오라클
- php
- 리액트네이티브
- Java의정석
Archives
- Today
- Total
이안의 평일코딩
[Vue] Vuex(3) - actions, $store.dispatch(), context 본문
반응형
actions
ajax요청과 같이 시간이 오래걸리는 것을 처리하기 위해서는 actions을 이용한다.
비동기식 처리를 지원하는 코드는 다음줄 부터 실행하려는 경향이 있기 때문에
의도치않는 버그가 생길 수 있고, 코드가 길어져 복잡해질 수 있다.
그래서 mutations: {}가 아닌 ajax 요청하지 않고 actions: {}에서 한다.
더보기 게시물 ajax를 요청해보자.
store.js
import axios from 'axios';
import { createStore } from 'vuex'
const store = createStore({
state () {
return {
more : {},
}
},
actions : {
getData(){
axios.get('URL.json')
.then((a)=>{
console.log(a.data) // ajax로 받아온 데이터
})
},
},
})
export default store;
getData()라는 함수를 actions에서 정의해준다.
App.vue
<template>
<p>{{ $store.state.more }}</p>
<button @click="$store.dispatch('getData')">더보기</button>
</template>
$store.dispatch()은 actions에 부탁하는 것이고, $store.commit은 mutations에 부탁한다.
App.vue에서 더보기 버튼으로 데이터를 가져온 뒤 (actions 후)
state를 변경하려면 무조건 mutations에서 한다.
store.js
import axios from 'axios';
import { createStore } from 'vuex'
const store = createStore({
state () {
return {
more : {},
}
},
mutations :{
setMore(state, data){
state.more = data
},
},
actions : {
getData(context){
axios.get('URL.json')
.then((a)=>{
console.log(a.data) // ajax로 받아온 데이터
context.commit('setMore', a.data)
})
},
},
})
export default store;
dispatch로 가져온 데이터를 setMore()라는 함수를 이용해 more이라는 state에 데이터를 넣어준다.
actions안에 mutations에 부탁하기 위한 commit()을 사용하려면 context를 이용한다.
정리하자면, 더보기 버튼을 누르면 dispatch('getData')로 ajax를 통해 데이터를 가져오는데
가져온 데이터를 저장하기 위해 mutations 함수를 이용해서 state에 저장한다.
반응형
'Front-end > Vue' 카테고리의 다른 글
[Vue] PWA, manifest.json, service-worker.js (0) | 2021.05.19 |
---|---|
[Vue] Vuex(4) - computed, mapState, mapMutations, mapActions (0) | 2021.05.19 |
[Vue] Vuex(2) - state 변경 (mutations, $store.commit()) (1) | 2021.05.18 |
[Vue] Vuex(1) - 설치 및 셋팅 (store.js, $store.state.데이터명) (0) | 2021.05.18 |
[Vue] 라이브러리 전역에서 사용하기 (0) | 2021.05.17 |
Comments