storage存储在不同端的表现

92 阅读2分钟

蛤蟆.png

事发起因,上面派发需求,需要在用户登录应用程序之后,去调一个接口返回一个配置对象,用来配置页面中一些功能的是否展示以及其他字段等,收到需求后,我直接一把梭。

公众号是H5开发的,直接使用localStorage.setItem,将返回结果塞进去,存储进去,全局使用localStorage.getItem去获取,但是去获取的时候报错,看了下控制台,我靠,怎么存进去了[object,object],这是什么鬼?抱着疑惑百度了一手,得出如下结论:

localStorage.setItem

当你尝试使用 localStorage.setItem 存储一个对象或数组时,如果直接存储,它们会被隐式地转换为字符串,但这通常不是你想要的结果。例如,如果你直接存储一个对象,那么存储的内容将会是 [object Object] 这样的字符串,而不是对象的具体内容。

因此,在将对象或数组存储到 localStorage 之前,你需要使用 JSON.stringify 方法将它们转换为字符串。这样,你就可以将字符串形式的对象或数组存储到 localStorage 中了。当你需要读取这些值时,你可以使用 JSON.parse 方法将字符串转换回对象或数组

微信图片_20240227140313.jpg

果然,在将返回的对象通过JSON.stringify包裹后存储进去成功了!

小程序和App开发,之前没注意到,直接将公众号的这一手就复制过去了,结果返工重写。全局搜索了一手,what's up!除了刚刚改的localStorage,其他地方都没用到过,后面注意到这是用的uniapp框架搭建的,在小程序和app环境下也不支持使用localStorage,无奈换了uni.setStorageSync,替换完后,使用也没问题,直接提交。结果又被退回来,说uni.setStorageSynclocalStorage的使用还是有点区别的,别直接换着用,一脸懵逼的我一脸懵逼,赶紧回去接着百度,如下:

uni.setStorageSync

uni.setStorageSync 是用于微信小程序的同步本地存储接口,它用于将数据存储在本地的缓存中。通常,这个接口可以直接存储 JavaScript 的基本类型如字符串、数字、布尔值等,以及可以被序列化的对象。

如果你尝试存储的 value 是一个对象,那么在调用 uni.setStorageSync 之前,你不需要手动将对象转换为字符串。因为这个过程会自动进行。但如果你需要将对象转为字符串,通常是为了存储更复杂的数据结构或者需要自定义序列化过程时。