浅谈微信小程序用setStorage和getStorage缓存和获取数据

2023-05-16

缓存数据

每个微信小程序都可以有自己的本地缓存,可以通过 wx.setStorage(wx.setStorageSync)、wx.getStorage(wx.getStorageSync)、wx.clearStorage(wx.clearStorageSync)可以对本地缓存进行设置、获取和清理。同一个微信用户,同一个小程序 storage 上限为 10MB。localStorage 以用户维度隔离,同一台设备上,A 用户无法读取到 B 用户的数据。

数据常用于哪里?

对于数据需求较小的历史记录、购物车事件等都可以使用storage进行缓存,Storage将数据存储在本地缓存中指定的 key 中,如果重复会覆盖掉原来该 key 对应的内容 可以参照微信小程序开发手册中的Storage

如何使用异步接口进行数据缓存?

将数据存储在本地缓存中指定的 key 中,会覆盖掉原来该 key 对应的内容,这是一个异步接口。
复制代码

OBJECT参数说明:

参数类型必填说明
keyString本地缓存中的指定的
dataObject/String需要存储的内容
successFunction接口调用成功的回调函数
failFunction接口调用失败的回调函数
completeFunction接口调用结束的回调函数(调用成功、失败都会执行)

示例代码

wx.setStorage({
    key:"key",
    data:"value"
})
复制代码

setStorage之后可以去到开发者工具里面查看 这是没有保存值的情况

可以看到是没有 key值的 那么当我们去进行输入搜索

最后再去 storage中查看

获取到了一个 keyhistoryArray数组 那么再去进行搜索

再看看 storage

得到了一个数组而且没有被覆盖,那么怎么实现的呢? 先来看看代码

search.wxml

 <view class="search-top-input">
      <input type="text" placeholder="搜索公司/职位" auto-focus="true" value="{{inputsearch}}" 
      bindconfirm="search"
      bindinput="inputSearchTap"
      data-index="{{index}}"/>
 </view>
 
 <view class="search-history" wx:if="{{status}}">
        <view class="search-history-title">
              <text>历史搜索</text>
              <image src="../../images/delete.png" bindtap="deleteHistory"></image>
        </view>
        <view class="search-history-detail" >
              <view class="history-detail" wx:for="{{history}}" wx:key="{{item}}" bindtap="historySearch" data-index="{{index}}">
                    <text class="detail" >{{item}}</text>
              </view>
        </view>
 </view>
 
 search.js
 
 设置data
 
data: {
    status:false,
    inputsearch:'',
    job:[],
    history:[],
},
 
 首先去获取storage中的值
 
  onLoad: function (options) {
    var that =this;
    wx.getStorage({
    key: 'history',
    success: function(res){
        that.setData({
          history:res.data,
        })
        if(that.data.history.length==0){
          that.setData({
            status:false
          });
        }else{
          that.setData({
            status:true
          })
         }
      },
      fail: function(res) {
        console.log(res+'aaaaa')
      }
    });
},
 
进行搜索和缓存数据到storage中

search:function(e){
var that =this;
var sear =this.data.inputsearch;
var jobs=this.data.job;
var input = new RegExp(sear);
var temp = [];
if(sear == ''){
  wx.showToast({
    title: '请输入要搜索信息',
    icon:"none",
    duration: 1000
  });
 return false;
}else{
   this.data.history.unshift(sear);
wx.setStorage({
  key: 'history',
  data: that.data.history,
  success: function(res){
    that.setData({
      history:that.data.history,
      status:true
    })
    console.log(res.data);
  },
})
  for(let i =0;i<jobs.length;i++){
    if(input.test(jobs[i].job) || input.test(jobs[i].company) || input.test(jobs[i].address)){
      
      temp.push(jobs[i]);
    var detail=temp;
    app.globalData.details=detail;
    }
  } 
  if(temp ==''){
     wx.showToast({
    title: '暂无此信息',
    icon:"none",
    duration: 1000
    
  });
  this.setData({
    inputsearch:''
  })
  }else if(temp){
    wx.navigateTo({
      url:'../about/about'
    })
    this.setData({
      inputsearch:''
    })
  }
 }
},
复制代码

storage中的key值设为hisotry

wx.setStorage({
  key: 'history',
  data: that.data.history,
)}
复制代码

定义一个数组history空数组去获取storage中的值,首先是去查询有没有该key值,如果没有则fail,那么history依然为空数组

wx.setStorage({
  key: 'history',
  data: that.data.history,
  success: function(res){
    that.setData({
      history:that.data.history,
      status:true
    })
  },
})
复制代码

返回得到history之后再去将inputsearch的值添加到history中,

这里有个误区
可能你会将输入的值inputsearch  push到一个新的空数组,然后再将这个新数组push到history数组中,但这个方法
显然不可行,你添加之后新数组将会存放在history数组的第一个下标的数组下,
对于history数组也就只有两个值
复制代码

好了,回到我要说的,那么如何将inputsearch添加到history中呢,可以使用unshift方法或者push方法,这里应该使用unshift应该将每个新增值存放在history的第一个位置,这是其实就是一个用户体验问题了

var that =this;
var sear =this.data.inputsearch;
this.data.history.unshift(sear);
wx.setStorage({
    key: 'history',
    data: that.data.history,
      success: function(res){
        that.setData({
          history:that.data.history,
          status:true
        })
        console.log(res.data);
      },
})
复制代码

好了,这样就不会出现“覆盖掉”原来的key值的问题了,是不是美滋滋

当然还有setStorageSync同步接口的问题

详情点击这里

这里是项目地址

查看点击这里

如果你觉得对你有所帮助

那么给我的github项目一个Star

访问点击这里

谢谢

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

浅谈微信小程序用setStorage和getStorage缓存和获取数据 的相关文章

  • arguments

    arguments是什么 xff1f 答 是一个对象 xff0c 是一个长的很像数组的对象 arguments内容是什么 xff1f 答 arguments是函数运行时的实参列表 函数运行期间 xff0c 关键的三个对象 AO 本函数AO上
  • xcode5项目图标添加

    转载文章 地址http www 360doc com content 14 0103 08 14615320 342227413 shtml 最近提交itunesconnect应用时 xff0c 有个警告说缺少120x120图标 xff0c
  • 三款扒站神器

    https www shiyanlou com questions 80548 10个 webzip xff0c HTTrack Website Copier xff0c teleport pro 我主要用2 个配合起来使用 xff0c 效
  • kubeadm部署kubernetes 1.13.1集群

    kubeadm是Kubernetes官方提供的用于快速部署Kubernetes集群的工具 xff0c 本篇文章使用kubeadm搭建一个单master节点的3节点k8s集群 kubernetes部署dashboard可视化插件 xff1a
  • curl 同时发送多个请求

    创建一对cURL资源 ch1 61 curl init ch2 61 curl init 设置URL和相应的选项 curl setopt ch1 CURLOPT URL 34 http test cm a php 34 curl setop
  • 网络通信第四课 C++发送Post请求的完整案例

    说明 当前例子采用boost asio库发送HTTP数据报文 xff0c 采用boost asio streambuf request流封装数据报文 xff0c 在例子的后面 通过string对响应数据包进行分析 xff0c 获取其中的js
  • 玩转X-CTR100 l STM32F4 l BMP280气压计传感器

    我造轮子 xff0c 你造车 xff0c 创客一起造起来 xff01 塔克创新资讯 塔克社区 www xtark cn 塔克博客 www cnblogs com xtark 本文介绍X CTR100控制器 扩展BMP280气压计传感器 xf
  • arduino连接LCD1602A

    接线图 caption id 61 34 attachment 1183 34 align 61 34 alignnone 34 width 61 34 1108 34 LCD1602A接线图 xff08 4位 xff09 caption
  • CURL详解

    目前为目最全的CURL中文说明了 学PHP的要好好掌握 有很多的参数 大部份都很有用 真正掌握了它和正则 一定就是个采集高手了 PHP中的CURL函数库 xff08 Client URL Library Function xff09 cur
  • C++各种类库介绍(转)

    C 43 43 类库介绍 再次体现了C 43 43 保持核心语言的效率同时大力发展应用库的发展趋势 在C 43 43 中 xff0c 库的地位是非常高的 C 43 43 之父 BJARNESTROUSTRUP先生多次表示了设计库来扩充功能要
  • 跨平台C++开源码的两种经常使用编译方式

    作者 xff1a 朱金灿 来源 xff1a http blog csdn net clever101 跨平台C 43 43 开源代码为适应各种编译器的编译 xff0c 採用了两种方式方面来适配 一种是makefile方式 以著名的空间数据格
  • 暗渡陈仓:用低功耗设备进行破解和渗透测试

    信息安全技术丛书 暗渡陈仓 xff1a 用低功耗设备进行 破解和渗透测试 Hacking and Penetration Testing with Low Power Devices 美 菲利普 布勒斯特拉 xff08 Philip Pol
  • EPG

    简介 EPG 是Electronic Program Guide的 英文缩写 xff0c 意思是电子节目菜单 IPTV所提供的各种业务的索引及导航都是通过 EPG系统来完成的 IPTV EPG实际上就是 IPTV的一个门户系统 EPG系统的
  • 什么是寄存器

    我们看到的 STM32 芯片已经是已经封装好的成品 xff0c 主要由内核和片上外设组成 若与 电脑类比 xff0c 内核与外设就如同电脑上的 CPU 与主板 内存 显卡 硬盘的关系 STM32F429 采用的是 Cortex M4 内核
  • 编程-函数栈与进程栈

    https mp weixin qq com s QsY3cwpLQ5qthgrpZJkBng 一 代码编程极简进化史 从纸带上的机器码 xff0c 到汇编语言算是比较自然而然的变化 因为汇编语言每一条指令即对应着一条机器指令码 汇编中的j
  • 开源飞控

    OpenPilot 官网 xff1a http www openpilot org WiKi xff1a http wiki openpilot cc 论坛 xff1a http bbs tryfly cn forum php KK飞控 M
  • Windows Server 2008r2 取消屏幕自动锁定

    Windows Server 2008r2取消屏幕锁定 企业网管在日常维护服务器的时候 xff0c 往往不会每次有问题都去机房处理 xff0c 一般都是通过远程连接到服务器终端上 xff0c 但是很多企业网管总是被Server 2008服务
  • JAVA中对List<Map<String,Object>>中的中文汉字进行排序

    转载于 xff1a http blog csdn net flykos article details 54631573 参考 xff1a http www jb51 net article 88710 htm 本篇文章 xff0c 对中文
  • Python maketrans() 方法

    描述 Python maketrans 方法用于给 translate 方法创建字符映射转换表 可以只接受一个参数 xff0c 此时这个参数是个字典类型 xff08 暂不研究这种情况 xff09 对于接受两个参数的最简单的调用方式 xff0
  • vue-cli3 项目从搭建优化到docker部署

    项目地址 vue cli3 project 欢迎 star 原文地址 www ccode live lentoo list 1 创建一个vue项目 相信大部分人都已经知道怎么创建项目的 xff0c 可以跳过这一节 xff0c 看下一节 1

随机推荐

  • 解决Linux:No route to host

    在VPS上面配置了某分布式服务 xff0c 死活跑不起来 xff0c 该配置的都配置了 xff0c 真是见鬼了 日志里面很多 xff1a No route to host 但是 xff0c 我能ping通 xff0c 为了排除是程序自身原因
  • 停止linux的ntpd服务

    service ntpd status service ntpd stop service ntpd status chkconfig list ntpd chkconfig level 35 ntpd off chkconfig list
  • 09.打印“caoliuzhenhao”

    printf 命令用于格式化输出 xff0c 是echo命令的增强版 它是C语言printf 库函数的一个有限的变形 xff0c 并且在语法上有些不同 注意 xff1a printf 由 POSIX 标准所定义 xff0c 移植性要比 ec
  • http://www.seattletechinterviews.com/

    http www seattletechinterviews com 转载于 https www cnblogs com kungfupanda p 6503751 html
  • inode的若干锚

    insert inode hash hash an inode 64 inode unhashed inode 64 hashval unsigned long value used to locate this object in the
  • Swap Nodes in Pairs

    Given a linked list swap every two adjacent nodes and return its head For example Given 1 gt 2 gt 3 gt 4 you should retu
  • Redis

    介绍 官网 xff1a http redis io Redis是一个开源的使用ANSI C语言编写 支持网络 可基于内存亦可持久化的日志型 Key Value数据库 xff0c 并提供多种语言的API 从2010年3月15日起 xff0c
  • 转 C++常用的类库

    1 系统和网络编程库 xff1a ACE 除了ACE之外 xff0c 还有很多系统和网络编程方面的程序库 比如在线程库方面 xff0c 还有ZThread boost thread xff0c 如果放大到C C 43 43 领域 xff0c
  • Linux零碎记录之ulimit【堆栈大小、stack size、进程数限制、文件句柄限制、linux用户空间限制】...

    写了个小程序 本来打算写个hash表的 xff0c 但是出现 段错误 include lt stdio h struct a char a 4096 char a1 4096 char a2 4096 char a3 4096 int ma
  • 串口扫盲十一:RS-232至RS-485RS-422接口的智能转换器

    摘要 详细地介绍了如何从RS 232信号线上高效率地产生电源 如何实现RS 232接口与RS 485RS 422接口的智能转换 同时 也给出了具体的硬件设计及软件设计方法 关键词 RS 232 RS 485RS 422 接口 智能转换器 随
  • strcpy()/strcat()

    为什么80 的码农都做不了架构师 xff1f gt gt gt char p1 15 61 34 abcd 34 p2 61 34 ABCD 34 str 50 61 34 xyz 34 strcpy str 43 2 strcat p1
  • 路由器逻辑接口配置总结

    逻辑接口配置 1 Loopback接口配置 Loopback 回环 接口是完全软件模拟的路由器本地接口 xff0c 它永远都处于UP状态 发往Loopback接口的数据包将会在路由器本地处理 xff0c 包括路由信息 Loopback接口的
  • 联合体、结构体简析

    1 联合体 结构体定义 联合体 xff1a 在进行某些算法的C语言编程的时候 xff0c 需要使几种不同类型的变量存放到同一段内存单元中 也就是使用覆盖技术 xff0c 几个变量互相覆盖 这种几个不同的变量共同占用一段内存的结构 xff0c
  • tcpdump抓包命令

    该命令是抓包分析工具 xff0c 可以将数据包的头或者是整个包抓取下来进行分析 xff0c 支持针对特定协议 主机进行过滤 xff0c 同时支持逻辑操作 抓取本机第一个网络接口通常是eth0上所有的包 tcpdump 抓取指定指定网卡上的的
  • rundll32.exe命令使用大法

    lt DOCTYPE html PUBLIC WCDTD XHTML StrictEN httpwwwworgTRxhtmlDTDxhtml strictdtd gt Rundll32 exe是什么 xff1f 顾名思意 xff0c 执行3
  • sftp

    引述自 xff1a http cs ecust edu cn snwei studypc oftencommand ftp htm sftp的命令格式为 xff1a sftp v d i n g hostname v 显示远程服务器的所有响
  • L298N接线图

    转载于 https my oschina net surenpi blog 481745
  • 大数据:Hive - ORC 文件存储格式

    一 ORC File文件结构 ORC的全称是 Optimized Row Columnar xff0c ORC文件格式是一种Hadoop生态圈中的列式存储格式 xff0c 它的产生早在2013年初 xff0c 最初产生自Apache Hiv
  • WPF RichTextBox 禁止换行

    原文 WPF RichTextBox 禁止换行 这个问题困扰了好久 xff0c 进过不断的努力 xff0c 终于解决了 lt RichTextBox Margin 61 34 0 44 10 0 34 Name 61 34 codeText
  • 浅谈微信小程序用setStorage和getStorage缓存和获取数据

    缓存数据 每个微信小程序都可以有自己的本地缓存 xff0c 可以通过 wx setStorage xff08 wx setStorageSync xff09 wx getStorage xff08 wx getStorageSync xff