我有一个要应用于json对象的过滤器列表.

我的基因Mutations 是这样的:

const mutations = {
    setStars(state, payload) {
        state.stars = payload;
        this.dispatch('filter');
    },

    setReviews(state, payload) {
        state.reviews = payload;
        this.dispatch('filter');
    }
};

由于过滤器是如何工作的,我需要重新应用它们,因为我不能简单地一直向下过滤列表,因为当用户取消 Select 过滤器选项时,这会给我带来麻烦.

因此,当对stars筛选器或reviews筛选器(用户正在筛选)进行变异时,我需要调用一个运行所有筛选器的函数.

我最简单的 Select 是什么?我可以添加一些辅助函数,或者设置一个调用Mutations 的操作来过滤我的结果吗?

推荐答案

Mutations 不能分派进一步的行动,但行动可以分派其他行动.因此,一种 Select 是让一个动作提交变异,然后触发过滤动作.

如果可能的话,另一种 Select 是将所有过滤器设置为getters,就像计算(computed)属性一样自然地对数据更改做出react .

调用其他操作的操作示例:

// store.js
export default {
  mutations: {
    setReviews(state, payload) {
      state.reviews = payload
    }
  }

  actions: {
    filter() {
      // ...
    }

    setReviews({ dispatch, commit }, payload) {
      commit('setReviews', payload)
      dispatch('filter');
    }
  }
}


// Component.vue
import { mapActions } from 'vuex';

export default {
  methods: {
    ...mapActions(['setReviews']),
    foo() {
      this.setReviews(...)
    }
  }
}

Vue.js相关问答推荐

为什么具有Piniastore 的Vue组件的react 性需要计算(computed)属性?

无法解析组件:google—pay—button

复选框列未在vutify中排序

Vue ChildComponent (GrandchildComponent) 应该更新 ParentComponent 的列表

如何将外部 svg 转换为 Vue3 组件?

vue 不重新渲染数据更改

如何在 vue js 的一页路由下显示不同的 category._id

如何从特定索引呈现 v-for

使用 Vue Js 运行 Jest 测试时出现语法错误:无法在模块外使用 import 语句

为什么组件在 v-if 下没有被销毁

在按键 vuejs 中只允许数字和一个小数点后 2 位限制

包含 Vue.js v-if 和 v-for 指令的 HTML 标签在加载时flash

Nuxt:显示静态文件夹中的本map像

Vue router路由,Root Vue 没有数据?

异步方法不等待函数

Vue - 如何在 v-if 或组件中使用窗口对象

在vue中单击时如何模糊元素

v-for 中的计算(Computed)/动态(Dynamic) v-model 名称

mount() 仅在组件 Vue.js 上运行一次

在~/components/AddPlaceModal.vue中找不到导出AddPlaceModal