什么是vuex?

136 阅读2分钟

一、vuex是什么,工作原理是什么?

vuex:集中数据共享

通过Vue.ues()安装vuex插件

vuex插件是一个对象,它的内部实现了一个install方法,这个方法会在安装插件时被调用,

从而把Store注入到vue实例里

veux的工作原理

state->vue components->actions->mutations->state->重新解析组件,渲染页面

Snipaste_2023-05-09_15-52-09.png

1.什么时候actions很有有用?

需要的数据需要从 另一台 服务器上获取时。 不需要另一台服务器提供数据时直接commit把东西交给mutations(不发ajax请求=不需要从另一条服务器上获取数据)

vuex的三兄弟相当于:action服务员 mutations厨师 state菜

数据类型: actions对象,mutations对象,state对象

2.为什么store管理他们3个?

因为dispatch与commit都是store身上的方法

Snipaste_2023-05-09_16-24-33.png

二、如何使用vuex

1.npm i vuex@3 (我用于vue2项目的) 不成功可参见官网

2.Vue.ues(Vuex)

3.store(创建)

4.vc==>store(让组件看得见store)

2.搭建vuex环境

/*

1.根目录创建vuex文件夹在其中创建store.js

2.根目录创建store文件夹在其中创建index.js(官网方法)

*/

1.store(创建)

在src->store->index.js创建store 搭建store的开发环境

//引入Vue核心库
import Vue from 'vue'
//引入Vuex
import Vuex from 'vuex'
//应用Vuex插件
Vue.use(Vuex)

//准备actions对象——响应组件中用户的动作
const actions = {}
//准备mutations对象——修改state中的数据
const mutations = {}
//准备state对象——保存具体的数据
const state = {}

//创建并暴露store
export default new Vuex.Store({
	actions,
	mutations,
	state
})

3.在main.js(vue项目)

import最先被解析,无论它在何位置,所有将Vue.ues(vuex)放到store->index.js中去解析

......
//引入store
import store from './store'
......

//创建vm
new Vue({
	el:'#app',
	render: h => h(App),
	store
})

可在App.vue的script中与data平级添加生命周期函数: mounted() { console.log('APP',this); } 可查看vc上的所有元素,当你发现$store时,说明vuex环境搭建成功!!!

-----搭建好了全局可用的store(既搭建好了vuex环境)----

3.如何实现第一次完整的数据共享

前提条件:vue2

准备App.vue如下,以及上面配置好的两个(main.js与store(index.js))

<template>
  <div>
        <div>sum:{{ sum }}</div>
        <button @click="addSum">sum++</button>
  </div>
</template><script>
    export default {
    name: 'App',
    data() {
        return {
            n:2
            sum:0
            }
    },
    methods: {
        addSum() {
        this.sum+=this.n
    }
    },
    mounted() {
    console.log('APP',this);
     }
    }
</script>

01.main.js改造为

......
<div>
        <!-- 实现store数据共享 -->
        <div>sum:{{ this.$store.state.sum }}</div>
        <button @click="addSum">sum++</button>
  </div>
......
methods: {
        addSum() {
            //调用dispatch传递(事件名称,需要传递的值)
        this.$store.dispatch('jia',this.n);
    }
    },
......

02.index.js改造为

......
//准备actions对象——响应组件中用户的动作
const actions = {
    //每一个事件都默认可以接收2个参数
    jia(context,value) {
        // console.log(context, value);
        //commit向下传递('事件名称',值)
        context.commit('JIA', value)
    }
}
//准备mutations对象——修改state中的数据
const mutations = {
    JIA(state,value) {
        // console.log(this);
        //处理数据,此时共享的store中的sum值也随之改变
       state.sum += value
    }
}
//准备state对象——保存具体的数据
const state = {
    sum:0
}
......

-----现在点击页面上的按钮,数据共享成功了----