uniapp数据缓存

news2024/11/15 16:31:55

利用uniapp做开发时,缓存数据是及其重要的,下面是同步缓存和异步缓存的使用

同步缓存

在执行同步缓存时会阻塞其他代码的执行

uni.setStorageSync(key, data)

设置缓存,如:

uni.setStorageSync('name', '张三')

uni.getStorageSync(key)

获取缓存,如:

uni.getStorageSync('name')

uni.removeStorageSync(key)

移除缓存,如:

uni.removeStorageSync('name')

uni.clearStorageSync()

清空所有缓存,如:

uni.clearStorageSync()

uni.getStorageInfoSync()

获取缓存更详细的信息,正如缓存中所有的key,如:

let res = uni.getStorageInfoSync()
//  取出缓存中所有的key,数组形式,如['name','age', ...]
let allStorageKeys = res.keys

异步缓存

异步缓存不会阻塞代码的执行,但是需要利用回调的特点,即执行成功之后要执行的代码放success中,失败的代码放fail中,一定要执行的代码放complete中

uni.setStorage(OBJECT)

设置缓存,如:

uni.setStorage({
    key: 'name',
    data: '张三'
})

uni.getStorage(OBJECT)

获取缓存,如:

uni.getStorage({
    key: 'name',
    success: (storage) => {
        //  获取key对应的value
        console.log('value: ', storage.data)
    }
})

uni.removeStorage(OBJECT)

移除缓存,如:

uni.removeStorage({
    key: removeAsyncKey.value
})

uni.clearStorage()

清空所有缓存,如:

uni.clearStorage()

uni.getStorageInfo(OBJECT)

获取缓存更详细的信息,正如缓存中所有的key,如:

uni.getStorageInfo({
    success: (res) => {
        //  取出缓存中所有的key,数组形式,如['name','age', ...]
        let allStorageKeys = res.keys
        console.log(allStorageKeys)
    }
})

uniapp案例

页面如下:

以下是用Vue3语法写的uniapp测试缓存的代码

<template>
    <view class="root">
        <view class="asyncStorageBox">
            <view class="title">
                <text>异步缓存</text>
            </view>
            
            <view class="set">
                <text>key: </text>
                <input type="text" v-model="setAsyncKey" />
                <text>value: </text>
                <input type="text" v-model="setAsyncValue"/>
                <button @click="setAsyncStorage">设置缓存</button>
            </view>
            <view class="remove">
                <text>key: </text>
                <input type="text" v-model="removeAsyncKey"/>
                <text style="visibility: hidden;">value: </text>
                <input type="text" style="visibility: hidden;"/>
                <button @click="removeAsyncStorage">清除缓存</button>
            </view>
            <view class="get">
                <text>key: </text>
                <input type="text" v-model="getAsyncKey"/>
                <text>value: </text>
                <input type="text" disabled="false" style="border-style: none;" v-model="getAsyncValue"/>
                <button @click="getAsyncStorage">获取缓存</button>
            </view>
            <view class="getAll">
                <view class="">
                    <button @click="getAsyncAllStorage">所有缓存</button>
                    <button type="warn" @click="clearAsyncAllStorage">清空缓存</button>
                </view>
                
                <textarea name="" id="" cols="30" rows="6" disabled="false" v-model="computeAllAsyncKeyValue"></textarea>
            </view>
        </view>
        <view class="syncStorageBox">
            <view class="title">
                <text>同步缓存</text>
            </view>
            <view class="set">
                <text>key: </text>
                <input type="text" v-model="setSyncKey"/>
                <text>value: </text>
                <input type="text" v-model="setSyncValue"/>
                <button @click="setSyncStorage">设置缓存</button>
            </view>
            <view class="remove">
                <text>key: </text>
                <input type="text" v-model="removeSyncKey"/>
                <text style="visibility: hidden;">value: </text>
                <input type="text" style="visibility: hidden;"/>
                <button @click="removeSyncStorage">清除缓存</button>
            </view>
            <view class="get">
                <text>key: </text>
                <input type="text" v-model="getSyncKey" />
                <text>value: </text>
                <input type="text" disabled="false" style="border-style: none;" v-model="getSyncValue"/>
                <button @click="getSyncStorage">获取缓存</button>
            </view>
            
            <view class="getAll">
                <view class="">
                    <button @click="getSyncAllStorage">所有缓存</button>
                    <button @click="clearSyncAllStorage" type="warn">清空缓存</button>
                </view>
                
                <textarea name="" id="" cols="30" rows="6" disabled="false" v-model="computeAllSyncKeyValue"></textarea>
            </view>
        </view>
    </view>
</template>
​
<script setup>
    import {} from '@dcloudio/uni-app'
    import { computed, ref } from 'vue';
    //  异步缓存数据
    const setAsyncKey = ref('')
    const setAsyncValue = ref('')
    const removeAsyncKey = ref('')
    const getAsyncKey = ref('')
    const getAsyncValue = ref('')
    const allAsyncKeyValue = ref({})
    const computeAllAsyncKeyValue = computed(() => JSON.stringify(allAsyncKeyValue.value))
    
    /**
     * 异步缓存key、value
     */
    function setAsyncStorage() {
        uni.setStorage({
            key: setAsyncKey.value,
            data: setAsyncValue.value
        })
    }
    /**
     * 异步获取数据
     */
    function getAsyncStorage() {
        uni.getStorage({
            key: getAsyncKey.value,
            success: (storage) => {
                getAsyncValue.value = storage.data
            }
        })
    }
    /**
     * 异步清除缓存
     */
    function removeAsyncStorage() {
        uni.removeStorage({
            key: removeAsyncKey.value
        })
    }
    /**
     * 异步清空所有缓存
     */
    function clearAsyncAllStorage() {
        uni.clearStorage()
    }
    /**
     * 异步查询出所有缓存
     */
    function getAsyncAllStorage() {
        uni.getStorageInfo({
            success: (res) => {
                let allStorageKeys = res.keys
                allAsyncKeyValue.value = {}
                for (let k of allStorageKeys) {
                    uni.getStorage({
                        key: k,
                        success: (storage) => {
                            allAsyncKeyValue.value[k] = storage.data
                        }
                    })
                }
            }
        })
    }
    
    
    //  同步缓存数据
    const setSyncKey = ref('')
    const setSyncValue = ref('')
    const removeSyncKey = ref('')
    const getSyncKey = ref('')
    const getSyncValue = ref('')
    const allSyncKeyValue = ref({})
    const computeAllSyncKeyValue = computed(() => JSON.stringify(allSyncKeyValue.value))
    
    /**
     * 同步缓存key、value
     */
    function setSyncStorage() {
        uni.setStorageSync(setSyncKey.value, setSyncValue.value)
    }
    /**
     * 同步获取数据
     */
    function getSyncStorage() {
        getSyncValue.value = uni.getStorageSync(getSyncKey.value)
    }
    /**
     * 同步清除缓存
     */
    function removeSyncStorage() {
        uni.removeStorageSync(removeSyncKey.value)
    }
    /**
     * 同步清空所有缓存
     */
    function clearSyncAllStorage() {
        uni.clearStorageSync()
    }
    /**
     * 同步查询出所有缓存
     */
    function getSyncAllStorage() {
        let res = uni.getStorageInfoSync()
        console.log(res)
        let allStorageKeys = res.keys
        allSyncKeyValue.value = {}
        for (let k of allStorageKeys) {
            allSyncKeyValue.value[k] = uni.getStorageSync(k)
        }
    }
    
    
</script>
​
<style lang="scss">
    .root {
        display: flex;
        flex-direction: column;
        .asyncStorageBox{
            display: flex;
            flex-direction: column;
            border: 1px solid black;
            margin-bottom: 20rpx;
        }
        .syncStorageBox{
            display: flex;
            flex-direction: column;
            border: 1px solid black;
        }
        .title {
            text-align: center;
            font-weight: bold;
        }
        .set {
            display: flex;
            flex-direction: row;
            input {
                margin-left: 20rpx;
                width: 150rpx;
                padding-left: 10rpx;
                border: 1px dotted #aaa;
            }
            button {
                height: 70rpx;
                line-height: 70rpx;
                margin-top: -10rpx;
                
            }
            margin: 30rpx 0;
        }
        .getAll{
            display: flex;
            margin-bottom: 20rpx;
            textarea {
                border: 1px solid black;
                width: 60%;
                margin-left: 50rpx;
            }
            button {
                height: 100rpx;
                margin-bottom: 50rpx;
            }
            
        }
        .get {
            display: flex;
            flex-direction: row;
            input {
                margin-left: 20rpx;
                width: 150rpx;
                padding-left: 10rpx;
                border: 1px dotted #aaa;
            }
            button {
                height: 70rpx;
                line-height: 70rpx;
                margin-top: -10rpx;
                
            }
            margin: 30rpx 0;
        }
        .remove {
            display: flex;
            flex-direction: row;
            input {
                margin-left: 20rpx;
                width: 150rpx;
                padding-left: 10rpx;
                border: 1px dotted #aaa;
            }
            button {
                height: 70rpx;
                line-height: 70rpx;
                margin-top: -10rpx;
                
            }
            margin: 30rpx 0;
        }
        
    }
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2167890.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python 课程21-Django

前言 在当今互联网时代&#xff0c;Web开发已成为一项必备技能。而Python作为一门简洁、高效的编程语言&#xff0c;其Web框架Django以其强大的功能和快速开发的特点&#xff0c;受到了广大开发者的青睐。如果你想深入学习Django&#xff0c;构建自己的Web应用&#xff0c;那么…

呼吸自救防护器的使用方式

呼吸自救防护器是一种用于在紧急情况下提供呼吸保护的设备&#xff0c;通常用于矿井、化工厂、火灾等环境。当出现缺氧、有毒有害气体泄漏或烟雾等紧急情况时&#xff0c;呼吸自救防护器可以提供氧气或过滤空气&#xff0c;帮助使用者在短时间内安全呼吸&#xff0c;逃离危险区…

十大常用加密软件排行榜|2024年好用的加密软件推荐,企业必备!

在信息安全日益受到重视的当今&#xff0c;选择合适的加密软件对于企业保护敏感数据至关重要。以下是2024年十大常用加密软件排行榜&#xff0c;助您提升数据安全性。 Ping32 Ping32是一款功能强大的加密软件&#xff0c;支持多种文件格式加密&#xff0c;用户界面友好&#xf…

【机器学习】 Flux.jl 求解 XOR 分类问题的神经网络模型

Flux.jl 搭建神经网络基本流程 #mermaid-svg-JuKPmnLqTqDhEhKf {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-JuKPmnLqTqDhEhKf .error-icon{fill:#552222;}#mermaid-svg-JuKPmnLqTqDhEhKf .error-text{fill:#5522…

【前端】35道JavaScript进阶问题

来源&#xff1a; javascript-questions/zh-CN/README-zh_CN.md at master lydiahallie/javascript-questions GitHub 记录一些有趣的题。 1 输出是&#xff1f; const shape {radius: 10,diameter() {return this.radius * 2},perimeter: () > 2 * Math.PI * this.rad…

[单master节点k8s部署]26.Istio流量管理(二)

bookinfo微服务 这个bookinfo微服务由四个微服务构成&#xff1a; 1&#xff09;productpage 这个微服务会调用 details 和 reviews 两个微服务&#xff0c;用来生成页面&#xff1b; 2&#xff09;details 这个微服务中包含了书籍的信息&#xff1b; 3&#xff09;reviews …

Scikit-LearnTensorFlow机器学习实用指南(三):一个完整的机器学习项目【下】

机器学习实用指南(三)&#xff1a;一个完整的机器学习项目【下】 作者&#xff1a;LeonG 本文参考自&#xff1a;《Hands-On Machine Learning with Scikit-Learn & TensorFlow 机器学习实用指南》&#xff0c;感谢中文AI社区ApacheCN提供翻译。 本文全部代码和数据集保存在…

TypeError: load() missing 1 required positional argument: ‘Loader‘

标题TypeError: load() missing 1 required positional argument: ‘Loader’ 源码&#xff1a; 处理后&#xff1a; 顺利通过&#xff0c;由于yaml版本导致的问题

Alertmanager 路由匹配

Alertmanager主要负责对Prometheus产生的告警进行统一处理&#xff0c;因此在Alertmanager配置中一般会包含以下几个主要部分&#xff1a; 全局配置&#xff08;global&#xff09;&#xff1a;用于定义一些全局的公共参数&#xff0c;如全局的SMTP配置&#xff0c;Slack配置等…

day-61 外观数列

思路 每次对字符串进行遍历即可&#xff0c;用一个Integer统计相邻的相同字符个数&#xff0c;如果当前字符与后面邻接的字符相同&#xff0c;num;如果不同&#xff0c;则将""nums.charAt(j)拼接到字符串中 解题过程 当n1时&#xff0c;可以直接返回&#xff0c;不为…

【机器学习导引】ch3-线性模型

线性回归 梯度 在数学中&#xff0c;对于函数 f ( x 1 , … , x m ) f(x_1, \ldots, x_m) f(x1​,…,xm​) 在点 a ( a 1 , … , a m ) a (a_1, \ldots, a_m) a(a1​,…,am​) 处的梯度被定义为&#xff1a; ∇ f ( a ) ( ∂ f ∂ x 1 ( a ) , … , ∂ f ∂ x m ( a ) )…

排序题目:对角线遍历 II

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;对角线遍历 II 出处&#xff1a;1424. 对角线遍历 II 难度 6 级 题目描述 要求 给定一个二维整数数组 nums \texttt{nums} nums&#xff0c;将 …

vue3.0 + element plus 全局自定义指令:select滚动分页

需求&#xff1a;项目里面下拉框数据较多 &#xff0c;一次性请求数据&#xff0c;体验差&#xff0c;效果就是滚动进行分页。 看到这个需求的时候&#xff0c;我第一反应就是封装成自定义指令&#xff0c;这样回头用的时候&#xff0c;直接调用就可以了。 第一步 第二步&…

eHR软件的价格一般是多少?

在人力资源数字化转型的大潮中&#xff0c;越来越多的企业开始关注eHR&#xff08;电子人力资源管理&#xff09;软件的采购问题。eHR软件价格并不是一个简单的数字&#xff0c;而是受多种因素影响&#xff0c;具有较大波动性。那么&#xff0c;eHR软件的价格一般是多少呢&…

侧边菜单的展开和折叠

通过按钮控制侧边栏的展开和折叠通过窗口宽度的变化控制侧边栏的展开和折叠&#xff08;小于768px,自动折叠&#xff09; 通过按钮控制展开 通过按钮控制折叠 切换到手机模式自动折叠 环境准备&#xff1a;Vue3Element-UI Plus <script setup> import {onMounted, r…

基于SpringBoot + Vue的Gucci进销存系统

文章目录 前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S 四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论 五、项目代码参考六、数据库代码参考七、项目论文示例结语 前言 &#x1f49b;博主介绍&a…

001. OBS (obs-studio)

1. 下载 https://obsproject.com/download windows c 插件下载 https://obsproject.com/visual-studio-2022-runtimes 2. 操作步骤 https://renwen.shnu.edu.cn/_s40/9a/2c/c28309a760364/page.psp https://zhuanlan.zhihu.com/p/597231652

【Java 问题】基础——IO

接上文 IO 42.Java 中 IO 流分为几种?Java IO体系中的装饰器模式抽象组件&#xff08;Component&#xff09;具体组件&#xff08;Concrete Component&#xff09;抽象装饰器&#xff08;Decorator&#xff09;具体装饰器&#xff08;Concrete Decorator&#xff09;使用装饰器…

喜讯 | 宝兰德「应用服务器软件 V9.5」荣获“2024年度优秀软件产品”殊荣

近日&#xff0c;中国软件行业协会公布了“2024年度推广优秀软件产品”名单。经过专家委员会的评议及最终审核&#xff0c;宝兰德凭借领先的技术能力和丰富的经验积累&#xff0c;中间件核心产品「应用服务器软件 V9.5」获评“2024年度优秀软件产品”。 本次评选活动由中国软件…

基于SpringBoot的在线考试系统设计与实现

1.1 研究背景 21世纪&#xff0c;我国早在上世纪就已普及互联网信息&#xff0c;互联网对人们生活中带来了无限的便利。像大部分的企事业单位都有自己的系统&#xff0c;由从今传统的管理模式向互联网发展&#xff0c;如今开发自己的系统是理所当然的。那么开发在线考试系统意…