Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Vuex突变后如何获得价值?_Javascript_Vue.js_Getter Setter_Vuex_Vuex Modules - Fatal编程技术网

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不知道有什么变化。解决方案是将日期设置为新的力矩对象。