javascript - Vuex Store Getter 未在 time.isoWeek() 上获取新值

标签 javascript vue.js vuex vuejs3

在我的模板中,我可以从我的商店获取时间,效果很好。每当时间改变时它就会更新。但是当我像这样映射来自状态的 setter/getter 时:

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");
  },
};

我的 setter/getter 看起来像这样:

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

最佳答案

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

moment(state.time).....

只需按照您需要的格式将日期/时间作为字符串保存到时间变量中即可。 并根据需要初始化状态时间

关于javascript - Vuex Store Getter 未在 time.isoWeek() 上获取新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66221682/

相关文章:

javascript - 从数组生成随机字符串并允许重复随机生成的数字

vue.js - 在 $navigateBack 中传递更改的 Prop

javascript - 在挂载的生命周期中保存 Vuex 状态

javascript - 如何选择html元素对象

javascript - 当鼠标悬停在页面上的元素上时,"True"被打印在 "Body"节点的底部

javascript - 尝试显示数据时出现 mustache 循环错误

javascript - 无法更改 vuejs-datepicker 的宽度和高度

php - 如何从 Vue 对 Laravel 执行批量删除?

javascript - 在 Vuex 中存储 JavaScript 对象并对其进行修改 - 概念

reactjs - EmberJS 中的 Vuex/Redux 等价物是什么?