front-end/Vue.js

Vuex 기초배우기 #2 (state)

정구 2022. 2. 22. 10:22
728x90
state는 data

 

 

 

 

 

vuex의 store는 자주 사용할 데이터들을 관리하는 상태 관리 라이브러리이다.

(게임에서 창고 같은 거, 어디서나 필요한 것들을 꺼내쓸 수 있다)

 

 

먼저 AllUsers.vue에 있는 allUsers 배열은 사용자들의 정보를 담고 있었다.

store로 보내기 딱 좋다.

 

Allusers.vue의 data()에서 allUsers 배열을 store로 옮긴다.

 

 

src/store.js

import Vue from "vue";
import Vuex from "vuex";

Vue.use(Vuex);

export default new Vuex.Store({
  state: {
    allUsers: [
      {
        userId: "hoza123",
        password: "123",
        name: "Hoza",
        address: "Seoul",
        src: "https://goo.gl/oqLfJR",
      },
      {
        userId: "max123",
        password: "456",
        name: "Max",
        address: "Berlin",
        src: "https://goo.gl/Ksk9B9",
      },
      {
        userId: "lego123",
        password: "789",
        name: "Lego",
        address: "Busan",
        src: "https://goo.gl/x7SpCD",
      },
    ],
  },
  mutations: {},
  actions: {},
});
state는 data들을 담아놓는 곳이다.
배열도 data이기에 state에 그대로 옮겨놓으면 된다.

 

 

이제 store에 있는 allUsers 배열에 대한 정보를 편하게 꺼내서 쓰면 된다.

 

이때 사용하는 법이 있다.

 

src/main.js

import Vue from 'vue'
import './plugins/vuetify'
import App from './App.vue'
import router from './router'
import store from './store'

Vue.config.productionTip = false

export const EventBus = new Vue()

new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')

 

 

 

앞서 vuex와 이를 사용하기 위한 store를 main.js에서 선언해주었다.

 

선언된 위치는 Vue 인스턴스이다.

 

그렇기에 Vue인스턴스에 접근하여 store를 사용하기 위해서는 $ 를 사용하여 접근한다

 

 

src/components/Users/AllUsers.vue

<template>
  <div>
    <h1>All Users</h1>
    <v-list two-line>
      <v-list-tile
        v-for="(user, index) in $store.state.allUsers"
        :key="index"
        avatar
      >
        <v-list-tile-avatar color="grey lighten-3">
          <img :src="user.src" />
        </v-list-tile-avatar>

        <v-list-tile-content>
          <v-list-tile-title v-html="user.name"></v-list-tile-title>
          <v-list-tile-sub-title
            >id:#{{ index }} / {{ user.address }} 거주</v-list-tile-sub-title
          >
        </v-list-tile-content>
      </v-list-tile>
    </v-list>
  </div>
</template>

<script>
import { EventBus } from "@/main.js";

export default {
  data() {
    return {};
  },
  mounted() {
    EventBus.$on("signUp", (users) => {
      this.$store.state.allUsers.push(users);
    });
  },
};
</script>
현재 allUsers 배열은 state안에 있기 때문에
$store.state.allUsers로 접근하였다

 

 

data를 store에 저장하고 싶다면 state

 

기억하자

728x90