swan.setStorage

解释:将数据存储在本地缓存中指定的 key 中,会覆盖掉原来该 key 对应的内容。主动删除历史小程序,卸载百度 APP ,或在系统中清除百度 APP 的缓存即可清除数据。目前单个 key 允许存储的最大数据长度无限制,没有自动清理存储机制。storage 上限 10MB ,用户需主动清理,期间数据一直可用。

Web 态说明:受浏览器限制,Web 态 storage 的容量一般为 5MB ,具体视浏览器 localStorage 的容量大小而定。

方法参数

Object object

object 参数说明

属性名类型必填默认值说明

key

String

本地缓存中的指定的 key

data

Object/String/Number/Array/Boolean

需要存储的内容

success

Function

接口调用成功的回调函数

fail

Function

接口调用失败的回调函数

complete

Function

接口调用结束的回调函数(调用成功、失败都会执行)

示例

跳转编辑工具

在开发者工具中打开

在 WEB IDE 中打开

扫码体验

代码示例

百度智能小程序

请使用百度APP扫码

图片示例

swan.setStorage - 图2

代码示例

  • SWAN
  • JS
  1. <view class="wrap">
  2. <view class="card-area">
  3. <view class="list-area border-bottom">
  4. <label class="list-item-key-4">key</label>
  5. <input class="list-item-value" bindfocus="keyFocus" bindinput="keyInput" type="text" value="{{key}}" placeholder="请输入key" />
  6. </view>
  7. <view class="list-area border-bottom">
  8. <label class="list-item-key-4">value</label>
  9. <input class="list-item-value" bindfocus="valueFocus" bindinput="valueInput" type="text" value="{{value}}" placeholder="请输入value" />
  10. </view>
  11. <view>
  12. <button bindtap="setStorage" type="primary" hover-stop-propagation="true">存储数据</button>
  13. <button bindtap="getStorage" type="primary" hover-stop-propagation="true" disabled="{{disabled}}">读取数据</button>
  14. </view>
  15. </view>
  16. </view>

代码示例 2:利用本地缓存提前渲染界面

业务场景:我们实现的小程序首页是展示一堆商品的列表。数据渲染的方式一般是在页面 onLoad 回调之后通过 swan.request 向服务器发起一个请求去拉取列表数据,在 success 回调中把数据通过 setData 渲染到界面上,如下代码所示。

  • JS
  1. Page({
  2. onLoad() {
  3. swan.request({
  4. // 仅为示例,并非真实的接口地址
  5. url: 'https://www.baidu.com/xxx',
  6. success: res => {
  7. if (res.statusCode === 200) {
  8. this.setData({
  9. list: res.data.list
  10. })
  11. }
  12. }
  13. })
  14. }
  15. })

在请求到数据前,我们避免页面白屏的方式一般是把之前的请求成功请求存在本地缓存里,在 onLoad 发起请求前,先检查是否有缓存过列表,如果有的话直接渲染界面,然后等到 swan.request 的 success 回调之后再覆盖本地缓存重新渲染新的列表,如下代码所示。

  • JS
  1. Page({
  2. onLoad() {
  3. let list = swan.getStorageSync('list');
  4. if (list) {
  5. // 本地如果有缓存列表,提前渲染
  6. this.setData({
  7. list: list
  8. })
  9. }
  10. swan.request({
  11. // 仅为示例,并非真实的接口地址
  12. url: 'https://www.baidu.com/xxx',
  13. success: res => {
  14. if (res.statusCode === 200) {
  15. list = res.data.list;
  16. // 再次渲染列表
  17. this.setData({
  18. list: list
  19. })
  20. // 覆盖缓存数据
  21. swan.setStorageSync("list", list);
  22. }
  23. }
  24. })
  25. }
  26. })

错误码

Android

错误码说明

201

解析失败,请检查调起协议是否合法

1001

执行失败

iOS

错误码说明

202

解析失败,请检查参数是否正确

1003

超过最大存储文件大小