简单入手 vuex--状态管理

摘要:
Action通过store.dispatch方法触发:addOptAsync(){//this.$store.commit//调用actions的成员方法,实现数据异步修改操作this.$store.dispatch},关于mapState、mapGetters、mapMutations、mapActions’优化vuex首先//做按需导入import{mapState,mapGetters,mapMutations,mapActions}from'vuex'在组件中使用:直接获得count共享数据:{{$store.state.count}}mapState方式获得count共享数据:{{count}}--{{count1}}mapGetters方式获得共享数据:{{getCount}}操作组件中的数据:通过mapMutations进行数据修改(无参)通过mapMutations进行数据修改(有参)mapActions异步修改(无参)mapActions异步修改(有参)methods:{//展开操作...mapMutations(['add','a

如果你之前使用过vue.js,你一定知道在vue中各个组件之间传值的痛苦,在vue中我们可以使用vuex来保存我们需要管理的状态值,值一旦被修改,所有引用该值的地方就会自动更新,那么接下来我们就来学习一下vuex是如何修改状态值的:

安装:npminstall vuex --save

引入:import Vuefrom'vue'

import Vuexfrom'vuex'

Vue.use(Vuex) //将vuex注册给vue

安装Vuex 之后,让我们来创建一个 store。创建过程直截了当——仅需要提供一个初始 state 对象和一些 mutation:

基础:

const store = new Vuex.Store({

state: {

count: 0

},

mutations: {

increment (state) {

state.count++

}

}})
export defert store //导出store

new Vue({

el: '#app',

store, //在vue实例全局引入store对象

router,

render: h => h(App)

})

关于 States:

vuex中的数据源,我们需要保存的数据就保存在这里,可以在页面通过 this.$store.state来获取我们定义的数据;

state: {

count: 0

},
在组建中获取值使用: 直接获得count共享数据:{{ $store.state.count }}
关于 Getter:
Getter相当于vue中的computed计算属性,getter 的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算,这里我们可以通过定义vuex的Getter来获取,Getters 可以用于监听、state中的值的变化,返回计算后的结果

getters: {

// 方法名称(state参数){}

// state参数可以帮助获取到vuex声明的共享数据

getCount(state) {

// 对共享数据count再加上200

return state.count + 200

}

},

在组建中使用getter:获得getters的共享数据:{{ $store.getters.getCount }}

关于 Mutations: 切记同步

数据我们在页面是获取到了,但是如果我们需要修改count值怎么办?如果需要修改store中的值唯一的方法就是提交mutation来修改,我们现在文件中添加按钮,这里我们点击按钮调用add(执行加的方法)和addN(执行减法的方法),然后在里面直接提交mutations中的方法修改值

// 对共享数据进行修改操作

mutations: {

// 对count进行累加1操作

// 方法参数state是固定语法,可以用以访问共享数据

add(state) { state.count++ },

// 对count指定参数进行累加操作

addN(state, arg) { state.count += arg },

// 定义一个异步累加方法

addAsync(state) {

setTimeout(() =>{

state.count++

}, 1000)

}

},

在组件中使用Mutations:

首先注册事件:

<button@click="addOpt">count累加操作(无参)</button>

<button@click="addOptN(5)">count累加操作(参数)</button>

<button@click="addOptAsync">count异步累加操作</button>

exportdefault{

methods: {

// 对共享数据修改的方法

addOpt(){

// 要调用vuex mutations的add方法

// 语法:this.$store.commit(mutations的方法)

this.$store.commit('add')

},

addOptN(n){

// 要调用vuex mutations的add方法

// 语法:this.$store.commit(mutations的方法, 参数)

this.$store.commit('addN', n)

}

}

}

关于 Actions: 切记异步

虽然页面上的值是改变了;我们达到了修改store中状态值的目的,但是,官方并不建议我们这样直接去修改store里面的值,而是让我们去提交一个actions,在actions中提交mutation再去修改状态值,先定义actions提交mutation的函数

actions: {

// 对数据进行"异步"修改

// 方法(参数){}

// context是固定参数,可以用于调用mutations的方法

addAsync(context) {

// 异步设置

setTimeout(() =>{

// 调用mutations中的操作方法

context.commit('add')

}, 1000)

},

// 根据参数进行异步修改

addAsyncN(context, n) {

setTimeout(() =>{

context.commit('addN', n)

}, 1000)

}

},

在组件中使用:调用context.commit提交一个 mutation,或者通过context.state和context.getters来获取 state 和 getters。

Action 通过store.dispatch方法触发:

addOptAsync(){

// this.$store.commit('addAsync')

// 调用actions的成员方法,实现数据异步修改操作

this.$store.dispatch('addAsync')

},

关于 mapState、mapGettersmapMutationsmapActions’优化vuex

首先

// 做按需导入

import{ mapState, mapGetters, mapMutations, mapActions } from'vuex'

在组件中使用:

<p>直接获得count共享数据:{{ $store.state.count }}</p>

<p>mapState方式获得count共享数据:{{ count }}--{{ count1 }}</p>

<p>mapGetters方式获得共享数据:{{ getCount }}</p>

操作组件中的数据:

<p><button@click="add">通过mapMutations进行数据修改(无参)</button></p>

<p><button@click="addN(10)">通过mapMutations进行数据修改(有参)</button></p>

<p><button@click="addAsync">mapActions异步修改(无参)</button></p>

<p><button@click="addAsyncN(7)">mapActions异步修改(有参)</button></p>

methods:{

// 展开操作

...mapMutations(['add','addN']),

// 展开效果类似如下

add(){

this.$store.state.count++

},

addN(arg){

this.$store.state.count+=arg

},

...mapActions(['addAsync','addAsyncN'])

},

计算属性

computed:{

// 展开运算符使用,

// 作用是 把mapState函数的返回值做展开运算

...mapState(['count','count1']),

// mapState函数的返回值为:

// {count:function(){return xxx},count1:function(){return xxx}}

// 展开结果为如下:

// count:function(){

// return this.$store.state.count

// }

// count1:function(){

// return this.$store.state.count1

// }

...mapGetters(['getCount'])

}


免责声明:文章转载自《简单入手 vuex--状态管理》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇部署QualitisHTTP上传文件解析下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

vuex基础知识总结

项目中要求添加vuex,根据学习我这个小白总结了一点自己的心得,供大家参考 在学习之前,要知道两件事 为什么要用vuex?vuex要什么场景下应用? 简单点解释一下 1.项目中应用了vue脚手架之后,组件之间一定会涉及到数据之间的传递,父子组件,兄弟组件,但是传统方法会很复杂,不易操作,而vuex相当于将所有需要用到的数据单独拿出,在每一个组件之间都能获取...

vuex存储和本地存储的区别

1、实质的区别 vuex存的是状态,存储在内存,localstorage是浏览器提供的接口,让你存的是文件,以文件的形式存储在本地 2、应用场景 vuex用于组件之间的传值,localstorage则主要用于页面之间的传值 3、永久性 当刷新页面时,vuex存储的值会丢失,localstorage不会 4、总结 个人在使用的时候,觉得用localstora...

C++20新特性

C++20新特性 新增关键字(keywords) concept requires constinit consteval co_await co_return co_yield char8_t 模块(Modules) 优点: 1)没有头文件; 2)声明实现仍然可分离, 但非必要; 3)可以显式指定导出哪些类或函数; 4)不需要头文件重复引入宏 (incl...

架构使用vuex结合vue-meta实现router动态设置meta标签

可以通过引入vue-meta模块,通过路由守卫监听获取到路由中meta的定义的值,再将获取到的值赋值到vuex中module模块中的state,再将模块中的值通过vue-meta模块中的metaInfo方法修改meta标签 参考:https://www.imooc.com/article/288045 1、安装 npm install vue-meta...

vue项目中vuex的安装和使用

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。详情可参阅vuex官网    https://vuex.vuejs.org/zh/ 1、下载安装vuex 打开IDE(我的是vscode)进入终端,进入项目文件,输入命令行npm install vue...

Vuex 模块化与项目实例 (2.0)

Vuex 强调使用单一状态树,即在一个项目里只有一个 store,这个 store 集中管理了项目中所有的数据以及对数据的操作行为。但是这样带来的问题是 store 可能会非常臃肿庞大不易维护,所以就需要对状态树进行模块化的拆分。 首先贴出一个逻辑比较复杂的H5项目:DEMO & 源码 该项目主要包括 banner、feeds、profile 三个...