如何循环遍历传递给具有 Vuex 存储和计算属性的组件的对象数组?

Posted

技术标签:

【中文标题】如何循环遍历传递给具有 Vuex 存储和计算属性的组件的对象数组?【英文标题】:How to loop through an array of objects passed to a component with Vuex Store & a computed property? 【发布时间】:2020-02-29 01:24:11 【问题描述】:

我正在构建一个项目来学习 Vuex。我正在我的 store 中创建一个对象数组,如下所示:

Vuex 商店:

import Vue from "vue";
import Vuex from "vuex";

Vue.use(Vuex);

export default new Vuex.Store(
  state: 
    users: [
       id: 1, name: 'John Doe', email: 'johndoe@gmail.com' ,
       id: 2, name: 'Jane Doe', email: 'janedoe@gmail.com'  ,
       id: 3, name: 'Mark Greywood', email: 'markgreywood@gmail.com'  ,
    ]
  ,
  mutations: ,
  actions: ,
  modules: 
);

现在,我使用如下计算属性访问组件中的 state

组件:

<template>
  <div class="home">
    <h1>Hello from Home component</h1>

   <!-- I do not loop through the users, nothing shows --> 
    <div v-for="user in users" :key="user.id"> user.name  </div>

   <!-- I get the users object in the DOM -->
    <div> getUsers </div>
  </div>
</template>

<script>
import  mapState  from 'vuex'

export default 
  name: "Index",
  computed: mapState(
    getUsers: state => state.users
  )
;
</script>

<style scoped lang="less">

</style>

我不明白我做错了什么。

【问题讨论】:

【参考方案1】:

改变这个

    <div v-for="user in users" :key="user.id"> user.name  </div>


到这里

    <div v-for="user in getUsers" :key="user.id"> user.name  </div>

使用您的 mapState 行,您有点告诉组件 - '嘿,我的 store.users 在 getUsers 变量中' 组件不知道“用户”。你没有像那样创建变量。

另一种方法是将循环更改为

    <div v-for="user in $store.state.users" :key="user.id"> user.name  </div>

在这种情况下,您可以删除计算属性“getUsers”

【讨论】:

【参考方案2】:

您在这行代码中无权访问users

&lt;div v-for="user in users" :key="user.id"&gt; user.name &lt;/div&gt;

您的组件只能访问映射到存储对象usersgetUsers(计算属性)。因此,每当商店中的 users 状态发生变化时,getUser 也会更新。因此,您应该迭代组件中的计算属性。

所以,迭代应该是

&lt;div v-for="user in getUsers" :key="user.id"&gt; user.name &lt;/div&gt;

【讨论】:

非常感谢您为我节省了数小时的痛苦,我不知道出了什么问题。还是个初学者'

以上是关于如何循环遍历传递给具有 Vuex 存储和计算属性的组件的对象数组?的主要内容,如果未能解决你的问题,请参考以下文章

Vuex + VueJS:未定义将计算属性传递给孩子

vuejs2:如何将 vuex 存储传递给 vue-router 组件

pl/sql 循环遍历表并将行的每个条目传递给存储过程

计算属性取决于 vuex 存储。如何更新缓存的值?

Vuex:使用存储变量的计算属性中的方法

如何遍历表的列名并将值传递给 MSSQL while 循环中的 UDF