반응형
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
- xcode
- PYTHON
- 센토스
- localserver
- VirtualBox
- jest
- linux
- react
- IOS
- 티스토리챌린지
- qunit
- androidstudio
- 개발
- unittest
- ReactNative
- 맥
- 오블완
- webpack
- Android
- 리눅스
- MAC
- vsCode
- centos
- build
- 네트워크
- Chrome
- MachineLearning
- TensorFlow
- node
Archives
- Today
- Total
로메오의 블로그
[VUE + TYPESCRIPT] Vuex Interface를 구현하는 Store 본문
반응형
Vuex Store의 기본 형식 입니다.
<script lang="ts">
import Vue from 'vue';
import Vuex, {StoreOptions} from 'vuex';
Vue.use(Vuex);
interface State {
// 상태값에 대한 인터페이스
}
const Store: StoreOptions<State> = {
state: {
// 상태값
},
mutations: {
// 상태 변이 함수
},
actions: {
// 상태 변이를 위한 로직
},
getters: {
// 계산된 값일 반환
}
}
export default new Vuex.Store(Store);
</script>
$ touch src/store.ts
store.ts 파일을 생성하고 아래와 같이 코딩 합니다.
import Vue from 'vue';
import Vuex, {ActionContext, StoreOptions} from 'vuex';
Vue.use(Vuex);
interface State {
count: number;
}
const store: StoreOptions<State> = {
state: {
count: 0,
},
mutations: {
setCount(state: State, count: number) {
state.count = count;
},
},
actions: {
increase({state, commit}: ActionContext<State, State>) {
commit('setCount', this.state.count + 1);
},
decrease({state, commit}: ActionContext<State, State>) {
commit('setCount', this.state.count - 1);
},
},
getters: {
count: (state: State) => state.count,
},
};
export default new Vuex.Store(store);
$ src/components/MyCount.vue
MyCount.vue 파일을 생성하고 아래와 같이 코딩합니다.
<template>
<div>
{{ $store.getters.count }}
</div>
</template>
<script lang="ts">
import {Vue, Component} from 'vue-property-decorator';
export default class MyCount extends Vue {}
</script>
src/views/Home.vue
<template>
<div class="home">
<img alt="Vue logo" src="../assets/logo.png">
<my-count></my-count>
<button @click="increase">증가</button>
<button @click="decrease">감소</button>
</div>
</template>
<script lang="ts">
import { Vue, Component, Provide } from 'vue-property-decorator';
import MyCount from '@/components/MyCount.vue';
@Component({
components: {
MyCount,
},
})
export default class Home extends Vue {
increase() {
this.$store.dispatch('increase');
}
decrease() {
this.$store.dispatch('decrease');
}
}
</script>
반응형
'Frontend > Vue' 카테고리의 다른 글
[VUE + TYPESCRIPT] 환경변수 설정 (0) | 2022.03.14 |
---|---|
[VUE + TYPESCRIPT] store module 분리하기 (0) | 2021.02.12 |
[VUE + TYPESCRIPT] Mixins 다중상속 (0) | 2021.02.12 |
[VUE + TYPESCRIPT] @Model (0) | 2021.02.12 |
[VUE + TYPESCRIPT] @Provide / @Inject로 데이터 전달 (0) | 2021.02.11 |
Comments