Vue技术栈开发学习之状态管理state&getter(Vuex基础)

2023-01-24 0 264

#VUE#

Vue技术栈开发学习之状态管理state&getter(Vuex基础)Vuex此基础

单纯如是说采用Vuex做为状况管理工作的业务流程

Vue技术栈开发学习之状态管理state&getter(Vuex基础)Vuex

具体来说模块 vue components促发Actions,Actions通常做USB的允诺,去服务器端允诺统计数据,他是触发器的,允诺完后触发两个mutations,透过mutations去修正Vuex中的state的状况值,state修正后他会促发你vue模块以快照图形,那么两个生态圈的业务流程。Actions、Mutations、State是vuex中的基本概念

关上以后建立的工程项目的store/index.js他是模块的根状况管理工作(须要引入vue/vuex,vuex做为vue的应用程序须要采用Vue.use方式把它读取进去,建立示例 new Vuex.store,最终在main.js把那个示例导入,装载到vue根模块的示例上)

state.js

表述state

const state = {

//一些状况放这里

}

export default state//导出

例如:

const state = {

appName:admin//采用驼峰命名,这里表述的值可以各个模块中采用比如在以后建立store.vue模块

}

采用方式1

在store.vue里重新定义 <p>{{appName}}</p>,采用计算属性获得

computed:{

appName(){//最单纯方式

return this.$store.state.appName

}

以上是在根表述的state,在模块表述state的采用

例如在store/module/user.js

const state ={userName:Man}

computed:{

appName(){//最单纯方式

return this.$store.state.appName

},

userName(){

return this.$store.state.user.userName//this.$store.state+模块名(注意不采用模块名是不能采用的)

}

}

采用方式2

import { mapState} from vues//采用vuex的工具函数{ mapState }是es6的结构赋值他相当于

import vuex from vues

import mapState = vuex.mapState

也是在计算属性里写

computed:{

…mapState([

appName

]//传入两个数组

)}

注意…为展开操作符,他会展开两个对象,会把对象里面的各个属性扁平化放在computed对象中,mapState最终会返回两个对象相当于方式1里面的对象

…mapState不传数组的话可以传两个对象

…mapState({

appName:state=>state.appName//须要传两个属性是两个回调函数,在函数中有两个参数是state,state代表根状况下的state

userName:state=>state.user.userName

}

)}

如果模块中是用来命名空间

例如在user.js

export default{

namespaced:true//命名空间利于模块更加密闭,不受外界的干扰

}

在store.vue中的import { mapState} from vues可以采用vuex提供的另外方式

import { createNamespacedhelpers} from vues

const { mapState }=>createNamespacedhelpers(user)//方式可以传两个命名空间的名称、模块名如user模块,此时mapState 就包含了user模块名称了

computed:{

1方式

…mapState({

userName:state=>state.userName//这里就不须要采用模块名称了

}

2方式

…mapState(user,{//这里须要传入模块名

userName:state=>state.userName//这里也不须要采用模块名称了

}

)}

getter

getter相当与两个模块的计算属性(计算属性可以根据值来经过一些计算处理,返回两个新的值,依赖的值发生变化的话,采用了getter的值也会做出相应的变化更新)

例如:store.vue模块中inputValue的值中,在计算属性里表述两个属性

{{inputValueLastletter}}

inputValueLastletter(){//返回inputValue里的最终两个字母

return this.inputValue.substr(-1,1)

}

而vuex的getters

在store目录下新建getters.js(例如根据state里面的appName的值计算)

const getters = {

appNameWithVersion:(state)=>{//属性值是两个函数,state代表state同级的state

//return state.appName + v2.0;//这里就可以直接采用state取值

//采用es6的模板语法

return `${state.appName}v2.0`

}

}

export default getters

新建后在index.js注入

import getters from ./getters

new Vuex.store({

getters//新增

})

调用getter

{{ appNameWithVersion }}

任然在store.vue模块里,在计算属性里

appNameWithVersion(){

return this.$store.getters.appNameWithVersion

}

import {mapState,mapGetters} from vuex

计算属性里

computed:{

…mapGetters([appNameWithVersion])

}

如果在模块中表述getters

例如在user模块中

const getters =={

return state.userName.substr(0,1)

}

}

export default {

getters

}

在store.vue采用

{{firstLetter}}

computed:{

…mapGetters(user,[firstLetter])相当于以下写法但是getter可以应用于多个模块全局采用,而以下写法只适合当前模块采用【透过其他属性传值外】

firstLetter(){

return this.userName.substr(0,1)

}

}

getter也可以采用,命名空间cteateNameSpaceHelpers

提示如果模块中没有采用命名空间的话,如user

模块里可以直接 import {mapState,mapGetters} from vuex

计算属性 …mapGetters([firstLetter])//这里不须要写模块名,任何模块里或根级别的getters

…mapGetters([

firstLetter,//模块里表述的getters

appNameWithVersion//跟级别表述的getters

])

举报/反馈

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务