【问题标题】:Update specific value of object in localStorage [duplicate]更新localStorage中对象的特定值[重复]
【发布时间】:2020-01-29 17:54:49
【问题描述】:

我想更新 localStorage 中对象的 dataId 字段。 对象:

let responseJson = {
                      id: user.id,
                      username: user.username,
                      firstName: user.firstName,
                      dataId: 1000
                   };

我正在使用以下代码:

let loggedInUser = localStorage.getItem('user_id');
JSON.parse(loggedInUser).userId = parseInt(2000);
localStorage.setItem('user_id', loggedInUser);

更新:

let loggedInUser = localStorage.getItem('user_id');
loggedInUser.dataId = parseInt(2000);
console.log('loggedInUser', JSON.stringify(loggedInUser));
localStorage.setItem('user_id', JSON.stringify(loggedInUser));

【问题讨论】:

  • 保存到localStorage时需要JSON.stringifyloggedInUser对象
  • @HarunYilmaz 是的,我更新了我的代码,但 localStorage 中的值仍然没有改变
  • 您不是在修改loggedInUser 的值,而是在修改解析后的值,该值应该分配给一个变量,然后重新编码。

标签: javascript reactjs


【解决方案1】:

这会有所帮助:

let responseJson = {
                      id: user.id,
                      username: user.username,
                      firstName: user.firstName,
                      dataId: 1000
                   };

let loggedInUser = JSON.parse(localStorage.getItem('user_id'));
loggedInUser.dataId = parseInt(2000);
localStorage.setItem('user_id', JSON.stringify(loggedInUser));

【讨论】:

  • 它不工作
  • 您好@VarinderSohal,您遇到了什么错误?
  • 无法分配给 {} 上的属性“dataId”:不是对象
  • 你能通过分享你目前拥有的东西来更新你的代码吗?
  • 代码更新完成了可以看到
【解决方案2】:

localStorage 中,所有值必须为字符串类型。因此,您必须在存储对象之前对其进行字符串化。

localStorage.setItem('user_id', JSON.stringify(loggedInUser))

顺便说一句:您应该在解析之前检查 user_id 值(或封装在 try/catch 中)。

【讨论】:

    【解决方案3】:

    你可以做这样的事情,你应该在设置为 localStorage 之前对其进行字符串化:

    let loggedInUser = JSON.parse(localStorage.getItem('user_id'));
    let loggedInUserObj = {...loggedInUser, dataId : 2000}; // <---should be dataId
    localStorage.setItem('user_id', JSON.stringify(loggedInUserObj));
    

    注意:- 您更新的不是dataId 属性,而是userId

    【讨论】:

    • 感谢您的回复,但您的代码只是添加了新字段,未更新当前可用的字段。
    • @VarinderSohal 哦,是的。您应该先将字符串解析为对象,然后对其进行解构以进行更新。在您的问题中,您发布的一件事是更新userId 而不是dataId
    猜你喜欢
    • 2018-08-23
    • 2020-03-24
    • 2021-11-25
    • 1970-01-01
    • 2021-06-11
    • 2018-11-07
    • 2021-12-21
    • 1970-01-01
    • 2020-02-04
    相关资源
    最近更新 更多