Vuex(基本操作)

192 阅读2分钟

什么时候使用Vuex

  1. 多个组件依赖同一个状态
  2. 来自不同的组件的行为需要变更同一状态

image.png

dispatch()传两个参数 第一个参数是动作类型 第二个参数是值

image.png

  1. npm i vuex
  2. Vue.use(Vuex)
  3. store
  4. vc==>store

注意: vuex现在最新版是vuex4,只能是vue3用 vue2的话要用vuex3 如果版本不对就会报以下错误

image.png

引入Vuex

没引入时

image.png

image.png image.png

image.png vue实例和组件都没有$store属性

引入vuex时

image.png

image.png

image.png

创建store文件夹

在src中创建store文件夹里面放index.js文件

image.png

在index.js文件中进行配置

// 该文件用于创建Vuex中最为核心的store
// 引入vuex
import Vuex from "vuex"
// 准备actions--用于响应组件中的动作
const actions = {}
// 准备muations--用于操作数据(state)
const mutations = {}
// 准备state--用于存储数据
const state = {}
//创建store  new Vuex身上的构造函数 写配置对象 创建并暴露store
export default new Vuex.Store({
    actions,
    mutations,
    state
})

在main中导入挂载

import Vue from 'vue'
import App from './App.vue'
import store from '@/store'
import Vuex from 'vuex'
Vue.use(Vuex)
Vue.config.productionTip = false
const vm = new Vue({
  render: h => h(App),
  store
}).$mount('#app')
console.log(vm);

你会发现一个很神奇的错误!

image.png : [vuex]必须调用Vue.use(vuex)在创建store实例之前。

分析原因!

image.png

处理!

image.png

运行!

image.png 你们心心念念的commit 和 dispatch就出来了!

使用dispatch

image.png

image.png

action 没有 jia 类型 我们需要在actions里面创建一个什么传xxx命名的函数 参数1为上下文对象 参数2为dispacth的value值

image.png

image.png

我们需要利用commit进行下一步

image.png

image.png

image.png mutation 没有 jia类型 我们需要在mutation在引入commit 传下来的 xxx来创建函数进行数据处理 第一个参数为state里进行过数据监视的对象,第二个参数是传下来的value值

image.png

image.png 我们想调用state里面的内容我们可以$store.state.xxx

image.png

vuex在的getter用于将state中的数据进行加工

image.png

image.png 类似于

image.png

利用vuex进行模块化

image.png

把每一个模块建立成小仓库进行管理 image.png 利用

vuex.store({
modules:{
        home,
        login,
        register,
        search
               }
})

进行配置 image.png

image.png

image.png

mapState和mapGetters

我们在引入Vuex中state里面的数据时是否很繁琐,我们的vue宗旨插值中尽量简洁 image.png

计算属性实现

image.png

image.png

但我们发现还是挺繁琐的,我们也没有更好的解决方法呢?

没错!就是我们的mapState了

mapState

第一步:导入mapState

import { mapState } from "vuex";

第二步:我们看看mapState是什么

 mounted() {
    console.log(this);
    console.log(mapState);
  },

image.png

image.png 单纯写mapState是一个函数,我们执行一下这个函数

 mounted() {
    console.log(this);
    console.log(mapState());
  },

image.png

返回值是个对象

mapState()的两种写法

对象写法

image.png

image.png

我们可以看出它的对象里面包含了函数我们将它门放进计算属性中

image.png

image.png

image.png

数组写法

image.png

多层仓库

image.png

image.png