跳转到内容
返回

vuejs基础复习3---vuex

基本概念

1.在每一个组件内部,都有一份属于该组件的data,页面显示的数据也依赖于此,我们也可以通过函数等来改变data中的数据,整个流程就像下图一样 vuex1

2.通过action改变state的数据,view来实时显示state中的数据 3.vuex就是一个所有组件一起维护的一个data 4.因为3,所以他是最强大的组件通信方式

使用

核心概念

代码演示

代码实现

const store = new Vuex.Store({
  state: {},
  getters: {},
  mutations: {},
  actions: {},
  modules: {},
});

store使用

在A组件中获取state的数据并显示

<template>
  <div>{{$store.state.name}}</div>
</template>
<script>
  export default {
    name: "A",
  };
</script>
const store = new Vuex.Store({
  state: {
    name: "Vuex学习",
  },
  getters: {},
  mutations: {},
  actions: {},
  modules: {},
});

getters使用1

获取数据后添加一段字符串在显示

<template>
    <div>
        {{$store.getters.addStr}}
    </div>
</template>
<script>
export default{
    name:'A'
}
const store = new Vuex.Store({
  state: {
    name: "Vuex学习",
  },
  // 默认参数1 state, 等同于this.state
  // 默认参数2 getters 等同于this.getters
  getters: {
    addStr(state) {
      return state.name + "111";
    },
  },
  mutations: {},
  actions: {},
  modules: {},
});

getters使用2

获取数据后添加一段字符串在显示,添加的字符串是组件传递过去的

<template>
    <div>
        {{$store.getters.addStr('A组件')}}
    </div>
</template>
<script>
export default{
    name:'A'
}
const store = new Vuex.Store({
  state: {
    name: "Vuex学习",
  },
  getters: {
    addStr(state) {
      // 通过返回一个函数 然后接受组件传递的参数
      return function (str) {
        return state.name + str;
      };
    },
  },
  mutations: {},
  actions: {},
  modules: {},
});

mutations使用

当点击按钮后,改变state中的name

<template>
    <div>
        {{$store.state.name}}
    </div>
    <button @click='change'>btn</button>
</template>
<script>
export default{
    name:'A',
    methods:{
        change(){
            // 1.通过commit(事件类型)触发mutations的事件
            this.$store.commit('changeName');
            // 2.通过对象类型触发
            this.$store.commit({
                // 触发事件类型
                type:'changeName',
                // 传递的参数
                num:0
            });
        }
    }
}
const store = new Vuex.Store({
  state: {
    name: "Vuex学习",
  },
  getters: {},
  mutations: {
    // 默认参数1.state
    // 默认参数2.payload 这个参数是接受触发该事件时传递的参数
    // 注:如果是以对象格式触发该事件时,payload接受到的是一个对象
    changeName(state, payload) {
      state.name = "mutations使用";
    },
  },
  actions: {},
  modules: {},
});

actions使用

当点击按钮后,先发送actions,进行异步操作后,触发mutations的事件,在改变state的name

<template>
    <div>
        {{$store.state.name}}
    </div>
    <button @click='change'>btn</button>
</template>
<script>
export default{
    name:'A',
    methods:{
        change(){
            this.$sotre.dispatch('asyncChange');
        }
    }
}
const store = new Vuex.Store({
  state: {
    name: "Vuex学习",
  },
  getters: {},
  mutations: {
    // 默认参数1.state
    // 默认参数2.payload 这个参数是接受触发该事件时传递的参数
    // 注:如果是以对象格式触发该事件时,payload接受到的是一个对象
    changeName(state, payload) {
      state.name = "mutations使用";
    },
  },
  actions: {
    // 默认参数1.context 就是store对象;
    // 默认参数2.payload为接受的参数对象
    asyncChange(context, payload) {
      setTimeout(() => {
        context.commit("changeName");
      }, 1000);
    },
  },
  modules: {},
});

module的使用

说明

<template>
    <div>
        {{$store.state.personInfo.name}}
    </div>
</template>
<script>
export default{
    name:'A',
}
const store=new Vuex.Store({
    state:{
        name:'Vuex学习'
    },
    getters:{},
    mutations:{},
    actions:{},
    modules:{
        perosonInfo:{
            state:{
                name:'man'
            },
            getters:{},
            mutations:{},
            // 需要注意 模块中的actions的context指向的是该模块
            // 如果想要获取根state:  context.rootstate即可
            actions:{},
            modules:{
        },
        animalInfo:{
            state:{
                name:'dog'
            },
            getters:{},
            mutations:{},
            actions:{},
            modules:{
        }
    }
})

以上就是vuex基本使用,详细可以参考官方文档



上一篇
正则表达式
下一篇
vuejs基础复习2---组件/组件通信
×