首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >未更新v的Vuex计算属性

未更新v的Vuex计算属性
EN

Stack Overflow用户
提问于 2019-02-19 23:25:34
回答 1查看 1.4K关注 0票数 0

我有一个简单的Vuex模块,只有一个对象: selectedEvent。

我可以使用以下方法更新所选事件:

代码语言:javascript
运行
复制
  <Event :event="selectedEvent" />

但是,我无法使用模块中定义的计算getter更新此属性的可见性:

代码语言:javascript
运行
复制
  <Event :event="selectedEvent" v-show="isEventSelected" />

我在App.js中的计算值:

代码语言:javascript
运行
复制
  computed: mapState({
    selectedEvent: state => state.events.selectedEvent,
    isEventSelected: state => state.events.isEventSelected
  })

我知道Vue很难观察到一些对象/数组的变化,所以我在我的突变中使用了Vue.set。我还试图在事件组件中移动v-show,但没有成功。

如果我在v-show中移动getter逻辑,它可以正常工作(尽管它很混乱),例如:

<Event :event="selectedEvent" v-show="selectedEvent.hasOwnProperty('id')" />

我对Vue很陌生-我在这里错过了什么?

store/modules/events.js:

代码语言:javascript
运行
复制
import { EVENT_SELECT } from "./types";
import Vue from "vue";

const state = {
  selectedEvent: {}
};

const getters = {
  selectedEvent: state => {
    return state.selectedEvent;
  },
  isEventSelected: state => {
    return state.selectedEvent.hasOwnProperty("id");
  }
};

const actions = {
  setSelectedEvent({ commit }, selectedEvent) {
    commit(EVENT_SELECT, selectedEvent);
  }
};

const mutations = {
  [EVENT_SELECT](state, selectedEvent) {
    Vue.set(state, "selectedEvent", selectedEvent);
  }
};

export default {
  namespaced: true,
  state,
  getters,
  actions,
  mutations
};

App.vue:

代码语言:javascript
运行
复制
<template>
  <div id="app">
    <b-container>
      <Calendar />
      <Event :event="selectedEvent" v-show="selectedEvent.hasOwnProperty('id')"/>
    </b-container>
  </div>
</template>

<script>
import Calendar from "./components/Calendar.vue";
import Event from "./components/Event.vue";
import { mapState } from "vuex";

export default {
  name: "app",
  components: {
    Calendar,
    Event
  },
  computed: mapState({
    selectedEvent: state => state.events.selectedEvent,
    isEventSelected: state => state.events.isEventSelected
  })
};
</script>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-19 23:40:49

在您的商店中,isEventSelected是一个getter,而不是一个状态属性,所以您应该使用mapGetters,例如

代码语言:javascript
运行
复制
import { mapState, mapGetters } from 'vuex'

// snip

computed: {
  ...mapState('events', ['selectedEvent']),
  ...mapGetters('events', ['isEventSelected'])
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54776478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档