Javascript Vuex突变后如何获得价值?
我为全局日期对象提供了简单的Javascript Vuex突变后如何获得价值?,javascript,vue.js,getter-setter,vuex,vuex-modules,Javascript,Vue.js,Getter Setter,Vuex,Vuex Modules,我为全局日期对象提供了简单的Vuex模块: import moment from 'moment'; const state = { date: moment() } // getters const getters = { date: state => state.date, daysInMonth: state => state.date.daysInMonth() } // mutations const mutations = { sub
Vuex
模块:
import moment from 'moment';
const state = {
date: moment()
}
// getters
const getters = {
date: state => state.date,
daysInMonth: state => state.date.daysInMonth()
}
// mutations
const mutations = {
subtractOneDay(state) {
state.date.subtract(1, 'days');
}
}
export default {
state,
getters,
mutations
}
我的子组件之一:
import { mapGetters, mapMutations } from 'vuex';
export default {
computed: Object.assign(mapGetters(['date', 'daysInMonth']), {}),
methods: {
subtractOneDay() {
this.$store.commit('subtractOneDay');
console.log(this.date.format('YYYY-MM-DD'), this.date.daysInMonth(), this.daysInMonth)
}
},
created() {
console.log('blocks created')
},
mounted() {
console.log('blocks mounted')
}
}
基本上,当日期更改时,我需要获得月份的天数(29、29、30或31)
问题是,计算属性daysInMonth
不会更改…矩的减法方法会变异引用的矩对象。这对于Vue来说是一个问题,因为这意味着对state.date
的引用没有更改,并且计算的属性不会重新计算其值
您可以使用moment的clone
方法解决此问题,以在subtractOneDay
方法中返回新的moment
这里有一个例子
console.clear()
const store=新的Vuex.store({
声明:{
日期:矩()
},
吸气剂:{
日期:state=>state.date,
daysInMonth:state=>state.date.daysInMonth()
},
突变:{
一天(州){
state.date=state.date.clone().subtract(1,'天');
}
}
})
新Vue({
el:“应用程序”,
商店,
计算:Object.assign(Vuex.mapGetters(['date','daysInMonth']),{}),
方法:{
一天{
这个.store.commit('subtractOneDay');
}
}
})
{{date}}
{{daysInMonth}}
减去1天
噢,我想commit
变异commit
运行subtractOneDay
变异,是的。但是在subtractOneDay
中,日期对象本身被更改,它不会变成新的日期。正因为如此,Vue不知道有什么变化。解决方案是将日期设置为新的力矩对象。