Vuex 101 스니펫

뷰엑스 101



Vuex는 Vue.js용 상태 관리 라이브러리입니다.
5가지 주요 개념이 있습니다.
  • 상태 - 앱 수준 상태 컨테이너
  • Getter - 구성 요소의 상태 데이터에 액세스하는 데 사용됨
  • 작업 - 상태에 대한 계산을 수행하고 원격 API에서 데이터를 가져옵니다.
  • 돌연변이 - 일반적으로 상태 데이터를 변경하기 위해 Action에 의해 호출됨
  • 모듈 - 위의 4에 대해 컨테이너화됨. 예: Todos Module, Auth Module...

  • 코드 조각


  • src 안에 store라는 폴더를 생성합니다.

  • 파일/src/main.js
    import Vue from 'vue';
    import App from './App.vue';
    import store from './store';
    
    new Vue({
        store,
        render: h => h(App)
    }).$mount('#app');
    

    파일/src/store/index.js
    import Vuex from 'vuex';
    import Vue from 'vue';
    import todos from './module/todos';
    
    // Load Vuex
    Vue.use(Vuex);
    
    // Create store
    
    export default new Vuex({
        modules: {
            todos
        }
    });
    

    파일/src/store/modules/todos.js
    import axios from 'axios'; 
    // we use axios to fetch data from remote API
    
    const state = {
        todos: []
    };
    
    const getters = {
        allTodos: (state) => state.todos;
    };
    
    const actions = {
        async fetchTodos({commit}) {
            const reponse = await axios.get('jsonplaceholder.typicode.com/todos');
    
            commit('setTodos', reponse.data);
        }
    };
    
    const mutations = {
        setTodos: (state, todos) => (state.todos = todos);
    };
    
    
    export default {
        state,
        getters,
        actions,
        muations
    };
    

    파일/src/components/todos.vue
    <template>
        <div>
            <h3> Todos </h3>
            <div class="todos">
                <div v-for="todo in allTodos" :key="todo.id">
                    {{ todo.title  }}
                </div>
            </div>
        </div>
    </template>
    
    <script>
    import { mapGetters, mapActions } from 'vuex';
    
    export default {
        name: 'Todos',
        methods: {
            ...mapActions(['fetchTodos'])
        },
        computed: {
            ...mapGetters(['allTodos'])
        },
        created() {
            this.fetchTodos()
        }
    }
    </script>
    
    <style>
    </style>
    

    좋은 웹페이지 즐겨찾기