【问题标题】:Vuex Store Getter doesn't get the new value on time.isoWeek()Vuex Store Getter 没有在 time.isoWeek() 上获得新值
【发布时间】:2021-05-19 03:29:46
【问题描述】:

在我的模板中,我可以从我的商店获取时间,而且效果很好。它会随着时间的变化而更新。但是当我像这样映射来自该州的吸气剂时:

computed: {
  ...mapGetters({
    week: "week",
    year: "year",
    time: "time",
  }),
}

周和年的值永远不会改变。这是为什么?我错过了什么?

但是在模板中这样做是可行的:$store.getters['week']

我的状态如下所示:

const state = {
  time: moment(),
};

动作:

const actions = {
  changeTimeToNextWeek(context) {
    context.commit("changeTimeToNextWeek");
  },
  changeTimeToPreviousWeek(context) {
    context.commit("changeTimeToPreviousWeek");
  },
};

突变:

const mutations = {
  changeTimeToNextWeek(state) {
    state.time = state.time.add(1, "week");
  },
  changeTimeToPreviousWeek(state) {
    state.time = state.time.subtract(1, "week");
  },
};

我的吸气剂看起来像这样:

const getters = {    
  week: (state, getters) => {
    return getters.time.isoWeek();
  },
  year: (state, getters) => {
    return state.time.isoWeekYear();
  },
  time: (state, getters) => {
    return state.time;
  },
};

【问题讨论】:

    标签: javascript vue.js vuex vuejs3


    【解决方案1】:

    moment() js 不是响应式的,所以尝试在 getter 中使用如下所示

    时刻(状态.时间).....

    只需根据您的要求格式将日期/时间作为字符串保存到 time 变量中。 并根据需要初始化 state time

    【讨论】:

    • 谢谢!对于那些想知道我这样解决我的问题的人:time: moment().valueOf() 并且在每个 getter 上,我将数字转回 moment 对象:return moment(state.time)
    • 有多种方式,看你自己
    猜你喜欢
    • 2021-07-06
    • 2018-11-30
    • 1970-01-01
    • 2017-04-13
    • 2020-05-26
    • 2017-12-24
    • 2020-12-26
    • 2020-06-24
    • 2020-11-28
    相关资源
    最近更新 更多