这里有两个问题想要问一下

来源:4-9 Storage封装

慕莱坞0998854

2020-02-21

  1. 老师这里操作的是sessionStorage,我想请问一下平时实际工作中用这个用的多吗?我就见过用localStorage的。
  2. 老师这里的封装我觉得有点奇怪,因为这样的写相当于限定了对象的格式只有两层?所以我改写了一下,但是这样还是有个问题 ,就是在setStorage的时候,只能把原数据取出来修改后再完整的写入。
const STORAGE_KEY = "mall";
const find = function(obj, name) {
  if (obj[name]) {
    return obj;
  }
  let res;
  for (let prop in obj) {
    if (
      obj.hasOwnProperty(prop) &&
      Object.prototype.toString.call(obj[prop]) === "[object Object]"
    ) {
      res = find(obj[prop], name);
    }
    if (res) {
      return res;
    }
  }
  return res;
};

export default {
  getStorage() {
    return JSON.parse(window.sessionStorage.getItem(STORAGE_KEY) || "{}");
  },
  setStorage(obj) {
    window.sessionStorage.setItem(STORAGE_KEY, JSON.stringify(obj));
  },
  findItem(key) {
    const data = this.getStorage();
    const res = find(data, key);
    return res;
  },
  getItem(key) {
    const res = this.findItem(key);
    return res ? res[key] : undefined;
  }
}

写回答

1回答

河畔一角

2020-02-21

1. 实际工作当中用localStorage居多,这个案例用sessionStorage讲解实际上只是为了跟后台保持一致,因为后台也是会话级别的。原理是一样,改个名字即可。
2.这个封装确实只支持两层,结合工作情况,发现两层其实已经能够满足90%以上的需求,一般的关键字段放在第一层,模块级别的放在第二层。没必要一直递归下去。你的做法是全部取出来然后一层层获取对象,然后赋值,最后一次性插进去其实也可以,但是我自己感觉不是很实用,只是个人观点

0
1
慕莱坞0998854
谢谢老师,因为我工作经验不多,所以不太清楚实际工作中的情况
2020-02-21
共1条回复

Vue全家桶实战 从零独立开发企业级电商系统

Vue全家桶构建企业级电商系统,真实服务端数据对接,高实用性

2560 学习 · 1307 问题

查看课程