微信小程序: 使用本地缓存

摘要:
//先判断一下本地存储中有没有旧的数据//{time:Date.now(),data:[...]}//没有旧数据,直接网络请求//有旧数据而且没有过期,就使用旧数据加载constCates=wx.getStorageSync;//这里的key用catesif(!

参考:https://www.bilibili.com/video/BV1RK4y1v7zv?p=19&spm_id_from=pageDriver

微信小程序: 使用本地缓存第1张

import { request } from "../../request/index.js"; //必须全路径
Page({

  /**
   * 页面的初始数据
   */data: {
      leftMenuList:[],
      rightMenuList:[],
      //当前选中的菜单索引
      currentIndex:0},
  //接口返回数据
Cates:[],
  /**
   * 生命周期函数--监听页面加载
   */onLoad: function(options) {
   /*web 和 微信小程序中的本地存储的区别:
      1.读取和设置的时候区别
      web: localStorage.setItem("key","value")    localStorage.getItem("key")
      小程序:wx.setStorageSync("key","value");    wx.getStorageSync("key");

      2.存储的时候区别
      web中存储的不管是什么类型的数据,读取的时候都先转换成字符串类型,再存储进去
      小程序:不存在数据转换过程
    */
    //this.getCates();
    //加载的时候先判断本地有没有缓存,如果有缓存而且没有过期,就用缓存的数据来加载页面。
    //先判断一下本地存储中 有没有旧的数据
    //{time:Date.now(),data:[...]}
    //没有旧数据,直接网络请求
    //有旧数据而且没有过期,就使用旧数据加载
    const Cates = wx.getStorageSync('cates');//这里的key用cates
    if(!Cates)
    {//不存在就请求数据
        this.getCates();
    }
    else{
      if(Date.now() - Cates.time > 60 * 60 * 1000)
      {
        this.getCates(); //如果数据缓存超过1小时,重新加载网络数据
}
      else{
        this.Cates =Cates.data;
        console.log("加载数据:");
        console.log(this.Cates);

        //给左侧和右侧数据整理
        let leftMenuList = this.Cates.map(v =>v.cat_name); 
        let rightMenuList = this.Cates[0].children;        
        //加载页面数据
        this.setData({
            leftMenuList,
            rightMenuList
        })
      }
      
    }
  },

  getCates() {
    request({  url:"https://api-hmugo-web.itheima.net/api/public/v1/categories"})
    .then (res=>{
      this.Cates =res.data.message;

      //把数据存储到本地缓存
      wx.setStorageSync('cates', {time:Date.now(),data:this.Cates});

      //构造左侧的大菜单数据
      let leftMenuList = this.Cates.map(v=>v.cat_name);
      //构造左侧的大菜单数据
      let rightMenuList = this.Cates[0].children;

      //加载页面数据
      this.setData({
        leftMenuList,
        rightMenuList
      })
    })
 },

 //左侧菜单的点击事件
menuClick(e){
    let _index =e.currentTarget.dataset.index;
    //构造左侧的大菜单数据
    let rightMenuList1 = this.Cates[_index].children;

    //更新数据
    this.setData({ 
      rightMenuList: rightMenuList1,
      currentIndex : _index
    })
 },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */onReady: function() {

  },

  /**
   * 生命周期函数--监听页面显示
   */onShow: function() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */onHide: function() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */onUnload: function() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */onPullDownRefresh: function() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */onReachBottom: function() {

  },

  /**
   * 用户点击右上角分享
   */onShareAppMessage: function() {

  }
})

免责声明:文章转载自《微信小程序: 使用本地缓存》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇npm包发布Python之路(第三十篇) 网络编程:socket、tcp/ip协议下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

springboot2.0 redis EnableCaching的配置和使用

一、前言   关于EnableCaching最简单使用,个人感觉只需提供一个CacheManager的一个实例就好了。springboot为我们提供了cache相关的自动配置。引入cache模块,如下。 二、maven依赖 <dependency> <groupId>org.springframework.boot&...

ABP module-zero +AdminLTE+Bootstrap Table+jQuery权限管理系统第十五节--缓存小结与ABP框架项目中 Redis Cache的实现

返回总目录:ABP+AdminLTE+Bootstrap Table权限管理系统一期 缓存 为什么要用缓存 为什么要用缓存呢,说缓存之前先说使用缓存的优点。 减少寄宿服务器的往返调用(round-trips)。 如果缓存在客户端或是代理,将减少对服务器的请求,减少带宽。 减少对数据库服务器的往返调用(round-trips)。 当内容缓存在web服务器,...

Django中的缓存

django内置了缓存框架,并提供了几种常用的缓存: 1、基于Memcached缓存 2、使用数据库进行缓存 3、使用文件系统进行缓存 4、使用本地内存进行缓存 5、提供缓存扩展接口 缓存配置 数据库缓存 1、创建缓存表 python manage.py createcachetable [tablename] 2、缓存配置 CACHES = { 'def...

经验分享:程序员如何快速定位问题(BUG)

让我掉下眼泪的 不止内存泄漏 让我夜夜不眠的 不止你的需求 明天还要改多久 你攥着我的手 让我感到为难的 是善变的需求 发布总是在半夜 回滚是永远的愁 错误(Bug)随时的暴漏 困扰着我心头 作为程序员,以上这些场景你一定都经历过。今天就来聊聊如何快速定位问题。 先划重点,下文所写都是一家之言,本人工作经验不多,语言表达能力有限,如果写的不好,还望轻喷...

mybatis的一级缓存

1、mybatis缓存使用场景 2、mybatis一级缓存命中场景  当mybatis执行相关右边的操作时,均会执行clearCache()方法,清空对应缓存。 一级缓存的作用域默认是sqlsession,也就是同一个会话。但是也可以设置为statement级别缓存,此时级别变小了。此时只有同一个statement的子查询才会命中缓存。 只有满足左边条...

Spring Cache的基本使用与分析

概述 使用 Spring Cache 可以极大的简化我们对数据的缓存,并且它封装了多种缓存,本文基于 redis 来说明。 基本使用 1、所需依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spr...