Vue.js/Vuex

Vuex 4. 설치와 state, getters

Jungsoomin :) 2020. 12. 18. 20:50

NPM

  • ES6 기반 지원을 많이 하기 때문에 ES6 기반 코딩이 권장된다.
  • package.json 에 해당 의존정보가 기술된다.
  • 관행적으로 루트폴더 아래 store 라는 폴더에 들어가며 store.js 파일로 정의된다.
npm i vuex --save
"dependencies": {
    "vue": "^2.5.11",
    "vuex": "^3.6.0"
  },


시작

store.js 의 기본적인 생성

import Vue from 'vue'
import Vuex from 'vuex'

//use() 는 전역적으로 기능을 추가할 때 사용한다. &store 로 접근 가능하다.
Vue.use(Vuex);

export const store = new Vuex.Store({
  
});

main.js 에 등록하여 Root Instance 에 등록시킨다. 속성은 store 이다.

import Vue from 'vue'
import App from './App.vue'
import {store} from "./store/store";

new Vue({
  el: '#app',
  store,
  render: h => h(App)
})

기술요소

  • state : 공유데이터 data(){}
  • getters : 연산 된 state 에 접근하는 속성 computed
  • mutations : state 값을 변경하는 이벤트 로직 methods
  • actions : 비동시 처리 로직 메서드 aysnc methods

State : 공유되는 데이터 $.store 에서 state 속성으로 접근한다.

//Vue
data : {
	message : 'Hello Vue.js!'
}

//Vuex
state: {
	message : 'Hello Vue.js'
}


// 사용

<!-- Vue -->
<p>{{ message }}</p>

<!-- Vuex -->
<p>{{ this.$store.state.message }}</p>

 

Getters : State 에 접근하는 속성 + computed() 와 같이 자동 연산 값을 제공하는 속성

// store.js
state : {
	num: 10
},
getters : { // 메서드 단에서 연산된 값을 제공한다.
	getNumber(state){
    	return state.num;
    },
    doubleNumber(state){
    	return state.num * 2;
    }
}

///

<!-- 사용 -->
<p>{{ this.$store.getters.getNumber }}<p>
<p>{{ this.$store.getters.doubleNumber }}</p>

 


TodoApp 에 적용하는 과정

  • storage 에 데이터를 끌어오는 로직을 기술했다.
  • Vuex 의 Store 생성자 옵션 중 state 를 재정의 하여 전역데이터를 등록시킨다.
//store.js

import Vue from 'vue'
import Vuex from 'vuex'

//use() 는 전역적으로 기능을 추가할 때 사용한다. &store 로 접근 가능하다.
Vue.use(Vuex);

// Function 으로 따로 뺌
const storage = {
  fetch() {
    const arr = [];
    //ES6
    const map = Object.entries(localStorage);
    map.forEach((entry,index) => {
      if(entry[0] !== 'loglevel:webpack-dev-server'){
        const item = JSON.parse(entry[1]);
        arr.push(item)
      }
      console.log(arr)
      });
    return arr;
  }
};

export const store = new Vuex.Store({
  state: {
    // 전역적으로 사용되는 데이터
    todoItems: storage.fetch()
  }

});

$.store.state 로 접근시킨다.

<!--   name = 클래스명 tag = HTML 태그 -->
<transition-group name="list" tag="ul">
    <li v-bind:key="index" v-for="(todoItem, index) in this.$store.state.todoItems" class="shadow">
    .../
</ransition-group>

'Vue.js > Vuex' 카테고리의 다른 글

Vuex 6.Actions  (0) 2020.12.19
Vuex 5.Mutations  (0) 2020.12.19
Vuex 3.사용하는 이유  (0) 2020.12.18
Vuex 2.MVC 패턴과 Flux 패턴에 대한 고찰  (0) 2020.12.18
Vuex 1. Flux , MVC 패턴 / Flux 등장 배경  (0) 2020.12.18