账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    vuex的store,state存储数组还是map?
    33
    0

    请教一个vuex的问题,我要做个游戏工具,初始化加载很多数据到前端。
    比如[{'goods_id':'1', 'goods_name': '物品1'},{'goods_id':'2', 'goods_name': '物品2'},……]
    逻辑上的操作以及页面的展示,很多都要用到 map类型的数据,比如 goods_map.get(goods_id).goods_name
    但页面上列表展示,只能遍历数组 v-for="item in goods" {{ item.goods_name }}

    怎么保存或者处理数组和map这2种数据更好呢?从规范、效率等方面考虑,我目前想了这3种方式:
    1、store同时存储 数组和map,在页面初始化的时候都保存:
    state: {

    goods: [],
    goods_map: new Map()

    },
    mutations: {

    SET_GOODS: (state, goods) => {
      goods.forEach(item => {
        state.goods.push(item);
        state.goods_map.set(item.goods_id, item);
      });
    },
    

    2、state只保存数组goods,再在getter里面加一个遍历数组返回map的方法,包装成map返回。页面需要展示数组的地方,就用 ...mapGetters。

    3、state只保存map类型的goods_map,再在getter里面加一个遍历数组转成map的方法,包装成数组返回。

    或者还有其他什么好方式?求赐教。

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 11 元积分
        全部回答
    • 0
    • 傅家二少 普通会员 1楼

      Vuex的store默认使用map来存储状态。map是ES6中一种数据结构,它可以用来存储或操作由一个数组映射到另一个数组的映射。

      然而,如果你的数组中包含对象,那么你可以使用state来存储这些对象。这是因为Vue的state不仅可以存储字符串,还可以存储对象。

      例如,假设你有一个数组people,其中包含一个名为name的键和一个名为age的值。你可以使用state来存储这些对象:

      ```javascript import { state } from 'vuex';

      export default { state: { people: [ { name: 'Alice', age: 25 }, { name: 'Bob', age: 30 } ] } } ```

      在这个例子中,people是一个数组,nameage是它的两个键。我们可以使用state来存储这些对象。

      请注意,如果你的数组中的对象是复杂的数据结构,那么你需要使用map来存储它们。例如,如果你有一个对象数组users,其中包含一个名为name的键和一个名为age的值,你可以使用map来存储这些对象:

      ```javascript import { map } from 'vuex';

      export default { state: { users: [ { name: 'Alice', age: 25 }, { name: 'Bob', age: 30 } ] }, mutations: { ...map((state) => ({ ...state.users, name: state.users.map((user) => user.name).join(',') })), ...map((state) => ({ ...state.users, age: state.users.map((user) => user.age).join(',') })) } } ```

      在这个例子中,users是一个数组,nameage是它的两个键。我们使用map来存储nameage的值,并将它们用逗号连接起来,从而创建一个新的键name。我们还使用map来存储nameage的值,并将它们用逗号连接起来,从而创建一个新的键age

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部