Vuex

作者: 夜夜夜空灵 | 来源:发表于2018-10-30 19:05 被阅读0次
    微信截图_20181030160531.png
    微信截图_20181030161411.png

    首先我们在 vue.js 2.X 开发环境中安装 vuex :

    npm install vuex --save
    
    微信截图_20181030164526.png

    然后在store目录下新建以下文件:
    1.state.js(存放所有的状态)
    2.actions.js(更新所有的状态)
    3.mutations.js
    4.mutation-types.js(存放action和Mutations中的共同所有的常量)
    5.getters.js
    6.index.js

    接着就需要在index.js文件下引入所有的文件了

    import Vue from 'vue'
    import Vuex from 'vuex'
    
    import state from './state'
    import mutations from './mutations'
    import actions from './actions'
    import getters from './getters'
    
    Vue.use(Vuex);
    
    //初始化一个store对象,因为取什么都是通过$store来取
    export default new Vuex.Store({
      state,
      actions,
      mutations,
      getters
    })
    

    由于Vuex是要在全局范围内都能使用,因此要在main.js中引入

    import store from './store'
    

    再然后 , 在实例化 Vue对象时加入 store 对象 :

    new Vue({
      el: '#app',
      router,
      store,//使用store
    })
    

    实现简易todolist功能

    1.调用dispatch方法去使用vuex中的方法

    <template>
      <div class="todo-header">
        <input
          type="text"
          placeholder="请输入今天的任务清单,按回车键确认"
          v-model="title"
          @keyup.enter="addItem"
        />
      </div>
    </template>
    
    <script>
      export default {
        name: "Header",
        props: {
          addTodo: Function
        },
        data() {
          return {
            title: ''
          }
        },
        methods: {
          addItem() {
            // 1.1 判断是否合理
            const title = this.title.trim();
            if(!title){
               alert('输入的内容不能为空');
               return;
            }
            // 1.2 生成一个todo对象
            const todo = {title, finished: false};
            // 1.3 调用方法
            // this.addTodo(todo);
            this.$store.dispatch('addTodo', todo);  
            // 1.4 清空输入框
            this.title = ''
          }
        }
      }
    </script>
    

    2.实现actions中的方法
    要确保方法名addTodo一致,同时 {commit}这个参数是vuex自带的,只要一生成就有,第二个参数为所需要传递的数据

    export default {
     // 添加一条记录
     addTodo({commit}, todo){
         commit()
     },
    

    3.为了使coomit能够进一步提交,需要在mutation-types中确定一个跟 actions中一样的方法名

    export const ADD_TODO = 'add_todo'; // 增加一条记录
    

    4.在mutations中实现进一步提交修改state中的数据
    state也是生成后自带的一个参数

    import {
     ADD_TODO,
    } from './mutation-types';
    
    export default {
     // 添加纪录
     [ADD_TODO](state, {todo}){
       state.todos.unshift(todo);
     },
    

    5.通过actions中的commit实现提交方法到Mutation中修改数据
    导入公共方法ADD_TODO 然后通过commit提交方法以及数据

    import {
      ADD_TODO,
    } from './mutation-types'
    
    export default {
      // 添加一条记录
      addTodo({commit}, todo){
          commit(ADD_TODO, {todo})
      },
    

    相关文章

      网友评论

          本文标题:Vuex

          本文链接:https://www.haomeiwen.com/subject/ahpgtqtx.html