【问题标题】:Vuex filter stateVuex 过滤器状态
【发布时间】:2018-05-28 20:24:09
【问题描述】:

我在 Vuejs Vuex 中使用我的第一个应用程序。 我找不到过滤状态的最佳方法。

存储/index.js

 state: {
  projects: []
 },
 mutations: {
   SET_PROJECT_LIST: (state, { list }) => {
     state.projects = list
   }  
 },
 actions: {
   LOAD_PROJECT_LIST: function ({ commit }) {
    axios.get('projects').then((response) => {
      commit('SET_PROJECT_LIST', { list: response.data})
     }, (err) => {
     console.log(err)
   })
  }
 }

在组件中:

computed: {
  ...mapState({
    projects
  })
}

此时我有一个我的项目列表。好!

现在我添加了按钮来过滤我的项目,例如: 活动项目,键入项目...

如何操作我的项目对象 (this.projects)?

和另一个this.$store.dispatch

使用另一个 getters 函数

我在不改变状态的情况下操纵状态?

我有点困惑。

Vuex 中填充列表的过滤器示例?

编辑: 我是这样尝试的:

this.$store.getters.activeProjects()

但是我如何更新 this.projects?

activeProjects(){
  this.projects = this.$store.getters.activeProjects() 
}

没用

【问题讨论】:

标签: vuejs2 vuex


【解决方案1】:

我建议您保持原始状态不变并使用“getters”过滤其数据。

事实上,官方文档包含一个如何完成所有“完成”待办事项的示例。它可能对你有用:

  const store = new Vuex.Store({
  state: {
    todos: [
      { id: 1, text: '...', done: true },
      { id: 2, text: '...', done: false }
    ]
  },
  getters: {
    doneTodos: state => {
      return state.todos.filter(todo => todo.done)
    }
  }
})

Getter 参考:https://vuex.vuejs.org/en/getters.html

祝你好运!

【讨论】:

  • 感谢您的回复。事实上我是这样尝试的:this.$store.getters.activeProjects() 但我如何更新 this.projects? this.projects = this.$store.getters.activeProjects() 不起作用
  • 好的,我认为这里发生了一些误解。如果你需要修改你的状态,你应该使用“mutators”,如果你想在不修改状态的情况下获得某些处理/过滤的数据,你应该使用“getters”。尝试删除括号:this.$store.getters.activeProjectsthis.$store.getters["activeProjects"]
  • 我试过了,但我得到了这个错误:[Vue warn]: Computed property "projects" was assigned to but it has no setter.我认为问题出在'this.projects = ...'
  • 它基本上说“项目”是一个计算属性,您不能为其设置任何新值。为什么不尝试在数据对象中创建一个名为“filtered_projects”的新属性,然后从“activeProjects”getter 分配结果?
  • 知道了,如果对您有帮助,请将答案标记为正确。谢谢!
猜你喜欢
  • 2017-07-28
  • 2020-05-07
  • 2020-10-22
  • 2020-05-30
  • 2017-06-19
  • 2021-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多