https://vuex.vuejs.org/zh/guide/actions.html
强制数据渲染:this.$forceUpdate();
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const store = new Vuex.Store({
// 全局变量
state: {
},
// 获取仓库数据的方法(有点类似计算属性, 降低代码冗余程度)
getters:{
},
// 修改数据的方法(同步)
mutations: {
},
// 修改数据的方法(异步)
actions: {
},
// 将Vuex分模块化
modules: {
}
})
export default store
// store
import store from './store'
Vue.prototype.$store = store
const store = new Vuex.Store({
state: {
baseUrl:'https://ismart.loongtek.cn/api-user',
},
})
export default store
import store from "@/store/index.js";
// state 变量
store.state.baseUrl
// 直接引用
this.$store.state.baseUrl
// 页面中计算属性
computed:{
newBaseUrl() {
return this.$store.state.baseUrl
}
}
// mapState 辅助函数, 可以快速引入 store 中的值
import { mapState } from "vuex";
export default {
// 引入vuex 的 store 中的state值, 必须在计算属性中书写!
computed: {
// 此处的 baseUrl 代表, store 文件中的 state 中的 baseUrl
...mapState(["baseUrl"])
// 变量名不一致时
...mapState({
newBaseUrl:state => state.baseUrl
})
},
{{ baseUrl }}
this.baseUrl
const store = new Vuex.Store({
state: {
nowParkId: null,
students:[
{id:110,name:'zhangsan',age:18},
{id:111,name:'lisi',age:21},
{id:112,name:'wangwu',age:30},
]
},
getters:{
getNowParkId(state){
// 类似计算属性,所以这一般都是有一些操作的,不然可以用(2)中的方式调用变量
return state.nowParkId
},
// getters默认是不能传递参数的, 这里传入 age , {{ getmoreAge(30) }}
getmoreAge(state){
return function(age){
return state.students.filter(s => s.age >= age)
}
}
},
},
})
export default store
// getters 方法 (获取 state 变量 nowParkId 的值)
this.$store.getters.getNowParkId
this.$store.getters.getmoreAge(30)
可带参数,可不带参数
mutations: {
updataNowParkId(state, val){
state.nowParkId = val;
}
},
// 修改 state 变量的方法,可以传字符,对象等等,改对应的方法操作
this.$store.commit('updataNowParkId', parkMsg.id)
this.$store.commit(‘updataParkMsg’, 数据) ++这里的“ 数据 ”可以是个对象++,可以传入 this。
state: {
students:[
{id:110,name:'zhangsan',age:18},
]
},
mutations: {
updataStudents(state, val){
state.students.push(val);
}
},
actions: {
// updataInfo({ commit }, obj){
// commit('updataStudents', data)
// updataInfo(context, obj){
// context.commit('updataStudents')
updataInfo(context){
// context:上下文,这里可以理解为store对象
context.commit('updataStudents')
}
或者 异步
updataInfo(context){
// context:上下文,这里可以理解为store对象
return new Promise((resolve)=>{
setTimeOut(()=>{
context.commit('updataStudents')
resolve()
},1000)
})
}
},
this. s t o r e . d i s p a t c h ( ′ a c t i o n s 方法 名 ′ ) t h i s . store.dispatch('actions方法名') this. store.dispatch(′actions方法名′)this.store.dispatch(‘actions方法名’, 具体值)
this.$store.dispatch(‘模块名/actions方法名’, 具体值)
5.2.1
this.$store.dispath('updataInfo')
5.2.2
this.$store.dispath('updataInfo').then(res=>{
console.log('完成了更新')
})
5.2.3 传参?
this.$store.dispatch('actions方法名', '具体值')
使用 mapActions 辅助函数将组件的 methods 映射为 store.dispatch 调用(需要先在根节点注入 store)
import { mapActions } from 'vuex'
export default {
methods: {
...mapActions([
'updataInfo', // 将 `this.updataInfo()` 映射为 `this.$store.dispatch('updataInfo')`
// `mapActions` 也支持载荷(传参):
'incrementBy' // 将 `this.incrementBy(amount)` 映射为 `this.$store.dispatch('incrementBy', amount)`
]),
// 替换方法名
...mapActions({
updata: 'updataInfo' // 将 `this.updata()` 映射为 `this.$store.dispatch('updataInfo')`
})
}
}
import { mapActions } from 'vuex'
export default {
computed: {
// 不分模块
...mapActions(['actions方法名'])
// 分模块,不改方法名
...mapActions('模块名', ['actions方法名'])
// 分模块,改方法名
...mapActions('模块名',{'新actions方法名': '旧actions方法名'})
}
}
state: {
imgUrl: "https://healthytool.hsfzxyh.com/xyh_images/",
},
Vue.mixin({
computed: {
imgUrl: function() {
return this.$store.state.imgUrl;
},
}
})
{{ imgUrl }}
或者
this.imgUrl