【问题标题】:Local persistent storage本地持久存储
【发布时间】:2017-01-12 07:46:55
【问题描述】:

我有一个流星反应应用程序,我需要一种方法来在本地保存一些信息,这也将是持久的。例如,如果用户保存一个 json,即使应用程序关闭并稍后重新打开,我也想使用相同的 json。我试过 groundDb 但它也需要服务器端。我需要此功能以使每个用户都可以保存游戏级别等信息。如果我也可以在网络上使用它,而不仅仅是原生版本,那就太好了。谢谢!

【问题讨论】:

  • localStorage 有点用,但我不知道如何将 JSON 与 localStorage 一起使用
  • JSON 只是一个字符串。

标签: json cordova meteor reactjs


【解决方案1】:

应该很容易。将对象字符串化以使其成为字符串,然后保存它。按照这个:

var dataToStore = JSON.stringify(data);
localStorage.setItem('someData', dataToStore);

【讨论】:

  • "Stringify the JSON" --- 这没什么意义。 JSON 已经是一个字符串。您的意思可能是“一个 JS 对象”或“一个 JS 数组”。
【解决方案2】:

您在保存到 localStorage 时序列化 JSON:

var serializedData = JSON.stringify(data);
localStorage.setItem('dataKey', serializedData);

并在从 localStorage 检索时反序列化:

var serializedData = localStorage.getItem('dataKey');
var data = JSON.parse(serializedData);

【讨论】:

  • 同事们,认真阅读您所写的内容。“您将 JSON 序列化” --- JSON 根据定义是序列化数据,并且已经是一个字符串。请停止传播这种关于 JSON 是什么的误解。这几天真的一个问题。
【解决方案3】:

是的,这很容易。获取您想要的对象并将其字符串化,然后存储在本地存储中。 JSON 对象是字符串对象,而不是字符串。所以当你将它存储到本地存储时,它不能存储为对象,但需要将其转换为 json 字符串。

添加:localStorage.setItem(); 检索:localStorage.getItem();

另一个好的做法是,在登录时检索数据,将其存储在数组中,然后再存储回本地存储。所以你不会有任何垃圾数据并且它总是最新的。

清除:localStorage.clear();注意:这将清除整个本地存储。 另请注意,本地存储有大小限制。大多数浏览器允许 5-10 mb。

如果您有大量数据,您还可以使用 indexedDB。它相当新,但更适合将大量数据存储在浏览器中。现在我认为只有 IE 有一个很好的实现。

【讨论】:

【解决方案4】:

使用标准localStoragehttps://developer.mozilla.org/en/docs/Web/API/Window/localStorage

localStorage.setItem('xyz', JSON.stringify(object));

const object = JSON.parse(localStorage.getItem('xyz'));

【讨论】:

    【解决方案5】:

    localForage

    我们使用的一个选项是npmlocalforage,它为localStorage 提供异步存储包装,并允许您保存任何类型的数据。您可以配置您的存储,并创建多个本地存储实例。

    你可以在 localForage 中存储任何类型;您不仅限于 localStorage 中的字符串。

    设置localforage 与使用localStorage 类似,但必须使用异步调用:

    使用 Promises(注意,如果您不使用 ES6 API,则可以使用回调)

    存储您的数据

    localforage
      .setItem(
        'state', data
      )
      .catch(console.error.bind(console))
    

    检索您的数据

    localforage.getItem('state')
      .then(data => /* ... */ )
      .catch(console.error.bind(console))
    

    为您的商店命名

    localforage.config({
      name: 'myStore'
    })
    

    You can read more about localForage here.

    【讨论】:

      【解决方案6】:

      要加入书呆子,这里是正确的解释:

      您应该首先使用全局 JSON 对象及其 stringify 方法将您的对象字面量转换为 JSON:

      let data = {a: 'some', b: 'data', c: null};
      let json = JSON.stringify(data);
      localStorage.setItem('data', json);
      

      当您想要检索数据并在应用程序中使用它时,您需要将 JSON 解析回对象字面量:

      let json = localStorage.getItem('data');
      let data = JSON.parse(json);
      

      【讨论】:

        猜你喜欢
        • 2017-08-04
        • 1970-01-01
        • 1970-01-01
        • 2017-06-06
        • 1970-01-01
        • 1970-01-01
        • 2018-01-12
        • 2014-11-29
        • 1970-01-01
        相关资源
        最近更新 更多