Vuex详细介绍和使用方法

目录
  • 一、什么是Vuex
  • 二、运行机制
  • 三、创建项目
    • 1、使用脚手架搭建Vue项目
    • 2、安装Vuex
    • 3、启动项目
    • 4、配置使用Vuex
      • 4.1、创建store文件夹
      • 4.2、配置全局使用store对象
  • 四、Vuex核心概念
    • 1、state
    • 2、mutations
    • 3、Getter
      • 3.1、通过属性进行访问
      • 3.2、通过辅助函数进行访问
    • 4、Action
      • 4.1、通过dispatch触发
      • 4.2、通过辅助函数触发
    • 5、Module
  • 五、总结
    • 1、核心概念
    • 2、底层原理

一、什么是Vuex

官网解释如下:

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。Vuex 也集成到 Vue 的官方调试工具devtools extension,提供了诸如零配置的 time-travel 调试、状态快照导入导出等高级调试功能。

那么什么是“状态管理模式”呢?

状态自管理应用包括以下几个部分:

  • state:驱动应用的数据源;
  • view:以声明方式将state映射到视图;
  • action:响应在view上的用户输入导致的状态变化;

看下面这张表示“单向数据流”理念的简单示意图:

从上面的图中可以看出:整个系统的数据流是单向的:数据(即state)去驱动视图(view)的更新,用户在view上面进行一些操作触发action,通过action去更新state,而不是视图直接更新state。

二、运行机制

下面来看一张官网上面的Vuex运行机制图:

从图中可以看出,Vuex不在和组件强相关。运行机制:Vuex提供数据(state),来驱动视图(这里指的是Vue组件),视图通过Dispatch派发Action,在Action中可以进一步做一些异步的操作(例如通过ajax请求后端的接口数据),然后通过Commit提交给Mutations,由Mutations去最终更改state。那么为什么要经过Mutations呢?这是因为我们要在Vue调试工具(Devtools)中记录数据的变化,这样可以通过插件去进行进一步的调试。所以说Mutations中只能是纯同步的操作,如果是有异步操作,那么就需要在Actions中进行处理。如果说没有异步操作,那么可以直接由组件进行Commit操作Mutations。如下图所示:

三、创建项目

1、使用脚手架搭建Vue项目

在命令行里面输入如下命令即可创建一个Vue项目:

vue init webpack vuex-demo

如下图所示:

然后回车进行安装,选择默认配置即可,出现如下面所示的界面表示创建成功:

2、安装Vuex

新创建的项目里面默认不会安装Vuex,如果要使用Vuex,需要进行手动安装,输入下面的命令:

npm install vuex --save

如下图所示:

注:--save表示进行全局安装

3、启动项目

在第一步创建成功项目以后,最后会提示如何启动项目,如下面所示:

这两行命令表示先进入项目的根目录,然后输入npm run dev命令即可启动项目,如下图所示:

在浏览器窗口里面输入:http://localhost:8080进行浏览:

4、配置使用Vuex

4.1、创建store文件夹

在src目录下面创建一个store文件夹,该文件夹用来存放所有与状态管理有关的文件,然后创建一个index.js文件,Store对象写在index.js文件里面,代码如下:

// 引入Vue
import Vue from 'vue'
// 引入Vuex
import Vuex from 'vuex'
// 添加全局引用
Vue.use(Vuex);
// 创建store对象
const store=new Vuex.Store({

})
// 导出创建的store对象
export default store;

4.2、配置全局使用store对象

在main.js里面配置全局使用store对象:

// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'
// 引入index.js文件
import store from './store/index'

Vue.config.productionTip = false

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  store,// 配置全局使用store对象
  components: { App },
  template: '<App/>'
})

到此为止,一个Vuex项目创建完成,并且安装了Vuex,下面就可以使用该项目演示如何使用Vuex进行状态管理了。

四、Vuex核心概念

1、state

在index.js文件里面添加state,代码如下:

// 引入Vue
import Vue from 'vue'
// 引入Vuex
import Vuex from 'vuex'
// 添加全局引用
Vue.use(Vuex);

// 创建state
const state={
    // 定义num属性并赋初始值为1
    num:1
}

// 创建store对象
const store=new Vuex.Store({
     // 添加state导出
     state
})

// 导出创建的store对象
export default store;  

在test.vue中使用展示初始值:

<template>
    <p>初始值:{{this.$store.state.num}}</p>
</template>

<script>
export default {
    name:'test'
}
</script>

页面效果:

注:还可以通过计算属性获取num的值:

<template>
   <div>
        <p>初始值:{{this.$store.state.num}}</p>
        <p>通过计算属性获取初始值:{{count}}</p>
   </div>
</template>

<script>
export default {
    name:'test',
    // 计算属性
    computed:{
        count(){
            return this.$store.state.num;
        }
    }
}
</script>

效果如图所示:

2、mutations

在上面使用了state可以获取到属性的值,那么如何修改state中属性的值呢?这时候就要用到mutations了。官网解释如下:

更改 Vuex 的 store 中的状态的唯一方法是提交 mutation。Vuex 中的 mutation 非常类似于事件:每个 mutation 都有一个字符串的事件类型 (type)和 一个回调函数 (handler)。这个回调函数就是我们实际进行状态更改的地方,并且它会接受 state 作为第一个参数。还是以上面的为例子。

修改index.js文件,添加mutations:

// 引入Vue
import Vue from 'vue'
// 引入Vuex
import Vuex from 'vuex'
// 添加全局引用
Vue.use(Vuex);

// 创建state
const state={
    // 定义num属性并赋初始值为1
    num:1
}

// 改变状态,通过commit
var mutations={
    // state作为第一个参数
    ChangeState(state){
        // 自增1
        state.num++;
    }
}

// 创建store对象
const store=new Vuex.Store({
     // 添加state
     state,
     // 导出mutations
     mutations
})

// 导出创建的store对象
export default store;

修改test.vue文件:

<template>
   <div>
        <p>初始值:{{this.$store.state.num}}</p>
        <p>通过计算属性获取初始值:{{count}}</p>
        <button @click="$store.commit('ChangeState')">改变属性值</button>
   </div>
</template>

<script>
export default {
    name:'test',
    // 计算属性
    computed:{
        count(){
            return this.$store.state.num;
        }
    }
}
</script>

效果:

注:改变状态还可以传递参数进行修改,看下面的例子:

修改index.js文件如下:

// 引入Vue
import Vue from 'vue'
// 引入Vuex
import Vuex from 'vuex'
// 添加全局引用
Vue.use(Vuex);

// 创建state
const state={
    // 定义num属性并赋初始值为1
    num:1
}

// 改变状态,通过commit
var mutations={
    // state作为第一个参数
    ChangeState(state){
        // 自增1
        state.num++;
    },
    // state作为第一个参数,para作为第二个参数
    ChangeStateWithPara(state,para){
        // 自增1
        state.num += para;
    }
}

// 创建store对象
const store=new Vuex.Store({
     // 添加state
     state,
     // 导出mutations
     mutations
})

// 导出创建的store对象
export default store;

test.vue修改如下:

<template>
   <div>
        <p>初始值:{{this.$store.state.num}}</p>
        <p>通过计算属性获取初始值:{{count}}</p>
        <button @click="$store.commit('ChangeState')">改变属性值</button>
        <button @click="$store.commit('ChangeStateWithPara',5)">传递参数改变属性值</button>
   </div>
</template>

<script>
export default {
    name:'test',
    // 计算属性
    computed:{
        count(){
            return this.$store.state.num;
        }
    }
}
</script>

效果:

3、Getter

有时候我们需要从store中的state中派生出一些状态,例如根据num的值返回基数或者偶数。如果有多个组件需要用到这个状态,那么我们就需要在每个组件里面都定义重复的一个函数,或者是定义成一个公共的函数,然后在多个组件里面导入,这两种方式无论采用哪种都不是很理想的。这时候我们就需要用到getter了。官网解释如下:

Vuex 允许我们在 store 中定义“getter”(可以认为是 store 的计算属性)。就像计算属性一样,getter 的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算。同样,Getter接受state作为第一个参数。看下面的例子:

修改index.js文件如下:

// 引入Vue
import Vue from 'vue'
// 引入Vuex
import Vuex from 'vuex'
// 添加全局引用
Vue.use(Vuex);

// 创建state
const state={
    // 定义num属性并赋初始值为1
    num:1
}

// 改变状态,通过commit
var mutations={
    // state作为第一个参数
    ChangeState(state){
        // 自增1
        state.num++;
    },
    // state作为第一个参数,para作为第二个参数
    ChangeStateWithPara(state,para){
        // 自增1
        state.num += para;
    }
}

// Getter,相当于store里面的计算属性
var getters={
     IsOddOrEven(state){
         return state.num % 2==0?'偶数':'奇数'
     }
}
// 创建store对象
const store=new Vuex.Store({
     // 添加state
     state,
     // 导出mutations
     mutations,
     // 导出getter
     getters
})

// 导出创建的store对象
export default store;

那么该如何访问getters呢?可以通过下面的几种方式进行访问:

3.1、通过属性进行访问

修改test.vue如下:

<template>
   <div>
        <p>初始值:{{this.$store.state.num}}</p>
        <p>通过计算属性获取初始值:{{count}}</p>
        <button @click="$store.commit('ChangeState')">改变属性值</button>
        <button @click="$store.commit('ChangeStateWithPara',5)">传递参数改变属性值</button>
        <!--通过属性访问getters-->
        <p>通过属性访问getters:{{$store.getters.IsOddOrEven}}</p>
   </div>
</template>

<script>
export default {
    name:'test',
    // 计算属性
    computed:{
        count(){
            return this.$store.state.num;
        }
    }
}
</script>

效果:

3.2、通过辅助函数进行访问

vuex中提供了mapGetters辅助函数,mapGetters辅助函数仅仅是将store中的getter映射到局部计算属性:

修改text.vue如下:

<template>
   <div>
        <p>初始值:{{this.$store.state.num}}</p>
        <p>通过计算属性获取初始值:{{count}}</p>
        <button @click="$store.commit('ChangeState')">改变属性值</button>
        <button @click="$store.commit('ChangeStateWithPara',5)">传递参数改变属性值</button>
        <!--通过属性访问getters-->
        <p>通过属性访问getters:{{$store.getters.IsOddOrEven}}</p>
        <!--通过辅助函数访问getters-->
        <p>通过辅助函数访问getters:{{IsOddOrEven}}</p>
   </div>
</template>

<script>
// 导入辅助函数
import {mapGetters} from 'vuex'
export default {
    name:'test',
    // 计算属性
    computed:{
        count(){
            return this.$store.state.num;
        },
        // 使用对象展开运算符将 getter 混入 computed 对象中,数组里面是在getters里面定义的方法名称,如果有多个
        // 则在数组里面添加多个即可
        ...mapGetters(['IsOddOrEven'])
    }
}
</script>

效果:

可以看出:通过属性访问和通过辅助函数访问实现的效果是一样的。

4、Action

Vuex官网对Action的解释如下:

Action类似于Mutation,两者的不同之处在于:

  • Action提交的是Mutation,而不是直接变更状态。也就是说Action是用来管理Mutation的,执行顺序是先执行Action,然后通过Action来触发Mutation,最后在通过Mutation来变更状态。
  • Action中可以包含异步操作,Mutation中只能包含同步操作。

看下面的例子:

修改index.js如下:

// 引入Vue
import Vue from 'vue'
// 引入Vuex
import Vuex from 'vuex'
// 添加全局引用
Vue.use(Vuex);

// 创建state
const state={
    // 定义num属性并赋初始值为1
    num:1
}

// 改变状态,通过commit
var mutations={
    // state作为第一个参数
    ChangeState(state){
        // 自增1
        state.num++;
    },
    // state作为第一个参数,para作为第二个参数
    ChangeStateWithPara(state,para){
        // 自增1
        state.num += para;
    }
}

// Getter,相当于store里面的计算属性
var getters={
     IsOddOrEven(state){
         return state.num % 2==0?'偶数':'奇数'
     }
}

// 用来管理mutations
var actions={
    ExecChangeState({commit}){
         // 执行mutations里面定义的ChangeState方法
         commit('ChangeState');
    }
}
// 创建store对象
const store=new Vuex.Store({
     // 添加state
     state,
     // 导出mutations
     mutations,
     // 导出getter
     getters,
     // 导出actions
     actions
})

// 导出创建的store对象
export default store;

4.1、通过dispatch触发

修改test.vue如下:

<template>
   <div>
        <p>初始值:{{this.$store.state.num}}</p>
        <p>通过计算属性获取初始值:{{count}}</p>
        <button @click="$store.commit('ChangeState')">改变属性值</button>
        <button @click="$store.commit('ChangeStateWithPara',5)">传递参数改变属性值</button>
        <!--通过属性访问getters-->
        <p>通过属性访问getters:{{$store.getters.IsOddOrEven}}</p>
        <!--通过辅助函数访问getters-->
        <p>通过辅助函数访问getters:{{IsOddOrEven}}</p>
        <!--演示Action-->
        <div>
            <p>属性值:{{count}}</p>
            <button @click="add">通过action改变属性值</button>
        </div>
   </div>
</template>

<script>
// 导入辅助函数
import {mapGetters} from 'vuex'
export default {
    name:'test',
    // 计算属性
    computed:{
        count(){
            return this.$store.state.num;
        },
        // 使用对象展开运算符将 getter 混入 computed 对象中,数组里面是在getters里面定义的方法名称,如果有多个
        // 则在数组里面添加多个即可
        ...mapGetters(['IsOddOrEven'])
    },
    methods:{
        add(){
            // 通过dispatch触发actions里面的ExecChangeState
            this.$store.dispatch('ExecChangeState');
        }
    }
}
</script>

效果:

下面看一下执行顺序:

分别在add()、ExecChangeState()、ChangeState()里面添加一句console.log()来查看执行顺序:

index.js修改如下:

// 引入Vue
import Vue from 'vue'
// 引入Vuex
import Vuex from 'vuex'
// 添加全局引用
Vue.use(Vuex);

// 创建state
const state={
    // 定义num属性并赋初始值为1
    num:1
}

// 改变状态,通过commit
var mutations={
    // state作为第一个参数
    ChangeState(state){
        console.log("mutations");
        // 自增1
        state.num++;
    },
    // state作为第一个参数,para作为第二个参数
    ChangeStateWithPara(state,para){
        // 自增1
        state.num += para;
    }
}

// Getter,相当于store里面的计算属性
var getters={
     IsOddOrEven(state){
         return state.num % 2==0?'偶数':'奇数'
     }
}

// 用来管理mutations
var actions={
    ExecChangeState({commit}){
         // 执行mutations里面定义的ChangeState方法
         console.log("actions");
         commit('ChangeState');
    }
}
// 创建store对象
const store=new Vuex.Store({
     // 添加state
     state,
     // 导出mutations
     mutations,
     // 导出getter
     getters,
     // 导出actions
     actions
})

// 导出创建的store对象
export default store;

test.vue修改如下:

<template>
   <div>
        <p>初始值:{{this.$store.state.num}}</p>
        <p>通过计算属性获取初始值:{{count}}</p>
        <button @click="$store.commit('ChangeState')">改变属性值</button>
        <button @click="$store.commit('ChangeStateWithPara',5)">传递参数改变属性值</button>
        <!--通过属性访问getters-->
        <p>通过属性访问getters:{{$store.getters.IsOddOrEven}}</p>
        <!--通过辅助函数访问getters-->
        <p>通过辅助函数访问getters:{{IsOddOrEven}}</p>
        <!--演示Action-->
        <div>
            <p>属性值:{{count}}</p>
            <button @click="add">通过action改变属性值</button>
        </div>
   </div>
</template>

<script>
// 导入辅助函数
import {mapGetters} from 'vuex'
export default {
    name:'test',
    // 计算属性
    computed:{
        count(){
            return this.$store.state.num;
        },
        // 使用对象展开运算符将 getter 混入 computed 对象中,数组里面是在getters里面定义的方法名称,如果有多个
        // 则在数组里面添加多个即可
        ...mapGetters(['IsOddOrEven'])
    },
    methods:{
        add(){
            // 通过dispatch触发actions里面的ExecChangeState
            console.log("触发add()");
            this.$store.dispatch('ExecChangeState');
        }
    }
}
</script>

效果:

从上图可以看出执行顺序是:先执行组件中的方法,然后执行actions,最后在执行mutations,最终通过mutations更新状态。

4.2、通过辅助函数触发

除了使用dispatch()触发actions以外,还可以使用辅助函数mapActions,辅助函数mapActions将组件中的methods映射为store.dispatch。修改test.vue如下:

<template>
   <div>
        <p>初始值:{{this.$store.state.num}}</p>
        <p>通过计算属性获取初始值:{{count}}</p>
        <button @click="$store.commit('ChangeState')">改变属性值</button>
        <button @click="$store.commit('ChangeStateWithPara',5)">传递参数改变属性值</button>
        <!--通过属性访问getters-->
        <p>通过属性访问getters:{{$store.getters.IsOddOrEven}}</p>
        <!--通过辅助函数访问getters-->
        <p>通过辅助函数访问getters:{{IsOddOrEven}}</p>
        <!--演示Action-->
        <div>
            <p>属性值:{{count}}</p>
            <button @click="add">通过action改变属性值</button>
        </div>
        <!--通过辅助函数触发actions-->
        <div>
            <p>属性值:{{count}}</p>
            <button @click="ExecChangeState">通过辅助函数改变属性值</button>
        </div>
   </div>
</template>

<script>
// 导入辅助函数
import {mapGetters, mapActions} from 'vuex'
export default {
    name:'test',
    // 计算属性
    computed:{
        count(){
            return this.$store.state.num;
        },
        // 使用对象展开运算符将 getter 混入 computed 对象中,数组里面是在getters里面定义的方法名称,如果有多个
        // 则在数组里面添加多个即可
        ...mapGetters(['IsOddOrEven'])
    },
    methods:{
        add(){
            // 通过dispatch触发actions里面的ExecChangeState
            console.log("触发add()");
            this.$store.dispatch('ExecChangeState');
        },
        // 辅助函数 mapActions辅助函数将组件中的methods映射为store.dispatch
        // 这里表示将'this.ExecChangeState'映射为'this.$store.dispatch('ExecChangeState')'
        ...mapActions(['ExecChangeState'])
    }
}
</script>

效果:

到了这里,可能有人会问:通过actions的方式进行管理mutations比直接使用mutations更复杂了,为什么还要这么做呢?实际上并非如此,mutations只能执行同步方法,Action就不受此限制,我们可以在actions内部执行异步方法,看下面的例子:

修改index.js,添加异步方法,代码如下:

// 引入Vue
import Vue from 'vue'
// 引入Vuex
import Vuex from 'vuex'
// 添加全局引用
Vue.use(Vuex);

// 创建state
const state={
    // 定义num属性并赋初始值为1
    num:1
}

// 改变状态,通过commit
var mutations={
    // state作为第一个参数
    ChangeState(state){
        console.log("mutations");
        // 自增1
        state.num++;
    },
    // state作为第一个参数,para作为第二个参数
    ChangeStateWithPara(state,para){
        // 自增1
        state.num += para;
    }
}

// Getter,相当于store里面的计算属性
var getters={
     IsOddOrEven(state){
         return state.num % 2==0?'偶数':'奇数'
     }
}

// 用来管理mutations
var actions={
    ExecChangeState({commit}){
         // 执行mutations里面定义的ChangeState方法
         console.log("actions");
         commit('ChangeState');
    },
    // 执行异步方法:点击按钮5秒之后再改变属性的值
    ExecChangeStateAsync({commit}){
        setTimeout(() => {
           commit('ChangeState')
        }, 5000);
    }
}
// 创建store对象
const store=new Vuex.Store({
     // 添加state
     state,
     // 导出mutations
     mutations,
     // 导出getter
     getters,
     // 导出actions
     actions
})

// 导出创建的store对象
export default store;

修改test.vue文件:

<template>
   <div>
        <p>初始值:{{this.$store.state.num}}</p>
        <p>通过计算属性获取初始值:{{count}}</p>
        <button @click="$store.commit('ChangeState')">改变属性值</button>
        <button @click="$store.commit('ChangeStateWithPara',5)">传递参数改变属性值</button>
        <!--通过属性访问getters-->
        <p>通过属性访问getters:{{$store.getters.IsOddOrEven}}</p>
        <!--通过辅助函数访问getters-->
        <p>通过辅助函数访问getters:{{IsOddOrEven}}</p>
        <!--演示Action-->
        <div>
            <p>属性值:{{count}}</p>
            <button @click="add">通过action改变属性值</button>
        </div>
        <!--通过辅助函数触发actions-->
        <div>
            <p>属性值:{{count}}</p>
            <button @click="ExecChangeState">通过辅助函数改变属性值</button>
        </div>
        <!--执行异步actions-->
        <div>
            <p>属性值:{{count}}</p>
            <button @click="ExecChangeStateAsync">通过异步方法改变属性值</button>
        </div>
   </div>
</template>

<script>
// 导入辅助函数
import {mapGetters, mapActions} from 'vuex'
export default {
    name:'test',
    // 计算属性
    computed:{
        count(){
            return this.$store.state.num;
        },
        // 使用对象展开运算符将 getter 混入 computed 对象中,数组里面是在getters里面定义的方法名称,如果有多个
        // 则在数组里面添加多个即可
        ...mapGetters(['IsOddOrEven'])
    },
    methods:{
        add(){
            // 通过dispatch触发actions里面的ExecChangeState
            console.log("触发add()");
            this.$store.dispatch('ExecChangeState');
        },
        // 辅助函数 mapActions辅助函数将组件中的methods映射为store.dispatch
        // 这里表示将'this.ExecChangeState'映射为'this.$store.dispatch('ExecChangeState')'
        // 这里表示将'this.ExecChangeStateAsync'映射为'this.$store.dispatch('ExecChangeStateAsync')'
        ...mapActions(['ExecChangeState','ExecChangeStateAsync'])
    }
}
</script>

效果:

5、Module

由于使用单一状态树,应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂时,store对象就有可能变得相当臃肿。为了解决上面的问题,Vuex允许我们将store分割成模块(Module)。每个模块都有自己的state、mutation、action、getter。

五、总结

通过上面的基本讲解,了解了Vuex的一些基本用法,Vuex在进行状态管理方面很方便,但并不是说Vue项目中就一定要使用Vuex,在Vuex中也可以不使用Vuex。下面总结一下Vuex中的核心概念和底层原理

1、核心概念

  • State:this.$store.state.xxx  取值
  • Getter:this.$store.getters.xxx  取值
  • Mutation:this.$store.commit('xxx')  赋值改变状态,只能调用同步方法
  • Action:this.$store.dispatch('xxx')  赋值,不能直接更改状态,最后还是要通过commit更改状态,可以操作异步方法。
  • Module:模块

2、底层原理

  • State:提供一个响应式数据;
  • Getter:借助Vue的计算属性computed来实现缓存;
  • Mutation:更改State状态;
  • Action:触发mutation方法;
  • Module:Vue.set动态添加state到响应式数据中;

到此这篇关于Vuex详细介绍和使用方法的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 一文轻松理解Vuex

    概述 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式(官网地址:https://vuex.vuejs.org/zh/).它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化. 换成我们大白话来说:Vuex就是一个状态管理模式,可以简单的理解为一个全局对象,然后我们可以修改这个全局对象里面的属性或者添加方法,但是我们不能像传统JS的那种直接赋值形式来修改,我们必须得按照Vuex给我们提供的规则来修改: Vuex的存在就是应用于解决各个组件之间传

  • 深入理解Vuex的作用

    概述 想必用过 vue.js 的童鞋,一定知道在 vue 各个组件之间传值的痛苦,基于父子.兄弟组件,我们传值可能会很方便,但是如果是没有关联的组件之间要使用同一组数据,就显得很无能为力了,而 vuex 就很好的解决了我们这种问题.所以 Vuex 也是必须掌握的,出去面试也是必问的,那么接下来我们就来简单介绍下 vuex 是如何来管理组件的状态的. 组件之间共享数据的方式 父向子传值:v-bind 属性绑定, props 接收:$parent / $children:$refs:$attrs /

  • Vue学习之Vuex的使用详解

    目录 简介 优缺点 优点 缺点 使用场景 示例 安装Vuex并引入 1.安装vuex 2.编写vuex的store 3.main.js引入CounterStore.js 业务代码 测试 简介 说明 本文介绍Vue的插件:Vuex.包括:优缺点.使用场景.示例. 官网 官网文档 API vuex-store 优缺点 优点 1.响应式 属于 vue 生态一环,,能够触发响应式的渲染页面更新. (localStorage 就不会) 2.可预测的方式改变数据 避免数据污染 3.无需转换数据 JS 原生的

  • Vuex中actions的使用教程详解

    目录 简介 说明 官网 actions概述 说明 特点 用法 示例 测试 简介 说明 本文用示例介绍Vuex的五大核心之一:actions. 官网 Action | Vuex API 参考 | Vuex actions概述 说明 Vuex 中的 mutation 非常类似于事件:每个 mutation 都有一个字符串的 事件类型 (type) 和 一个 回调函数 (handler).这个回调函数就是我们实际进行状态更改的地方,并且它会接受 state 作为第一个参数. 特点 1.异步操作,通过m

  • Vue项目中如何运用vuex的实战记录

    目录 Vuex 是什么? vuex使用周期图 我的store目录 实现一个vuex的示例 总结 Vuex 是什么? TIP

  • VueX安装及使用基础教程

    目录 1.安装vuex依赖包 2.导入vuex包 3.创建 store 对象 4.将 store 对象挂载到vue实例中 (1).State: (2).Mutations: (3).Actions: (4).Getters: 1.安装vuex依赖包 npm install vuex --save 2.导入vuex包 import Vuex from 'vuex' Vue.use(Vuex) 3.创建 store 对象 export default new Vuex.Store({ // stat

  • 详解Vuex的属性和作用

    目录 Vuex是什么? Vuex的5个属性 vuex 的 State 特性是? vuex 的 Getter 特性是? vuex 的 mauation 特性是? vuex 的 action 特性是? 什么情况下应该使用 Vuex? 总结 Vuex是什么? VueX是一个专门为 Vue.js 应用设计的状态管理架构,统一管理和维护各个vue组件的可变化状态(你可以理解成 vue 组件里的某些 data ). vuex 可以理解为一种开发模式或框架.比如 PHP 有 thinkphp ,java 有

  • Vuex总体案例详解

    目录 一.简介 二.优点 三.使用步骤 1. 安装Vuex 2. 引用Vuex 3. 创建仓库Store 四.包含模块 1. State 2. Getters 3. Mutations 4. Action 5. Modules 五.Vuex最最简单的项目实例 1. 存储数据 2. 获取数据 3. store文件目录结构 index.js state.js mutations.js actions.js getters.js 4. 使用store 一.简介 我们来看看对 Vuex 比较专业的介绍:

  • 还在用vuex?来了解一下pinia

    目录 1.什么是pinia 2.优势 3.使用(非常简单) 总结 1. 什么是pinia 通俗的讲 : ① vuex精简版 ,而且vue官方更加推荐使用. ②优势又完胜于vuex ,下面我们来了解下pinia. 2.优势 pina vuex pinia 同时支持vue2和vue3 vue2要用vuex 3 版本vue3要用vuex 4 版本 不分同步异步,更好的ts支持 分同步异步,不太兼容ts 享受自动补全… 需要注入,导入函数,调用他们… 3. 使用 (非常简单) ① 安装 npm inst

  • vuex的核心概念和基本使用详解

    目录 介绍 开始 安装 ①直接下载方式 ②CND方式 ③NPM方式 ④Yarn方式 NPM方式安装的使用方式 store概念及使用 概念: 定义 使用 mutations概念及使用 概念: 使用: 定义 使用 action概念及使用 概念: 定义 使用 getters概念及使用 概念: 定义 使用 总结 介绍 Vuex是实现组件全局状态(数据)管理的一种机制,可以方便的实现组件之间的数据共享 开始 安装 ①直接下载方式 创建一个 vuex.js 文件 将https://unpkg.com/vue

  • 如何使用 Vuex的入门教程

    目录 前言 一.基本概念 初识vuex 二.项目场景 三.如何使用 1.安装 2.State初始值 3.Getters修饰值 4.Mutations修改值 5.Actions异步修改值 四.总结 五.建议 前言 本人曾对 Vuex 作过详细介绍,但是今天去回顾的时候发现文章思路有些繁琐,不容易找到重点.于是,在下班前几分钟,我对其重新梳理了一遍. tips:本文的案例均为Vue2版本. 一.基本概念 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组

随机推荐