uniapp数据缓存

 利用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>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

从零开始的c++之旅——多态

1. 多态的概念 通俗来说就是多种形态。 多态分为编译时多态&#xff08;静态多态&#xff09;和运行时多态&#xff08;动态多态&#xff09;。 编译时多态主要就是我们之前提过的函数重载和函数模板&#xff0c;同名提高传不同的参数就可以调 用不同的函数&#xff0c…

nginx-proxy-manager实现反向代理+自动化证书(实战)

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 &#x1f38f;&#xff1a;你只管努力&#xff0c;剩下的交给时间 &#x1f3e0; &#xff1a;小破站 cnginx-proxy-manager实现反向代理自动化证书 nginx-proxy-manager是什么搭建nginx-proxy-manage…

人才画像系统:助力企业打造动态人才成长体系

在当今竞争激烈的市场环境中&#xff0c;人才已成为企业发展的核心竞争力。为了满足企业发展对人才的需求&#xff0c;人才画像系统应运而生&#xff0c;通过以岗位胜任力模型为基础定义人才标准&#xff0c;多维度采集员工信息进行人才对标和盘点&#xff0c;为企业的人才选拔…

【Hadoop和Hbase集群配置】3台虚拟机、jdk+hadoop+hbase下载和安装、环境配置和集群测试

目录 一、环境 二、虚拟机配置 三、 JDK、Hadoop、HBase的安装和配置 【安装和配置JDK】 【安装和配置Hadoop】 【安装和配置Hbase】 四、 Hadoop和HBase集群测试 【Hadoop启动测试】 【Hbase启动测试】 一、环境 OS: CentOS-7 JDK: v1.8.0_131 Hadoop: v2.7.6 Hb…

制作一个3D建模只需10秒:腾讯发布3D开源模型“混元3D”

混元 3D 模型 腾讯在科技领域投下一颗重磅炸弹&#xff0c;宣布推出混元 3D 生成大模型 “hunyuan3d - 1.0”&#xff0c;这是业界首个同时支持文字、图像生成 3D 的开源模型。它具有生成速度快、泛化能力强、可控性好等特点&#xff0c;直接引起了 AI 界众人的关注。 混元3D-1…

情怀系列国际版棋牌完整源码具备强大的多语言扩展功能,涵盖了900多款子游戏,专为全球市场的游戏开发和运营设计。

情怀棋牌源代码的服务器端使用JAVA和Node.js开发&#xff0c;采用RocketMQ作为消息队列中间件&#xff0c;有效防止服务器堵塞、消峰。数据库使用MySQL&#xff0c;媒体存储采用MongoDB&#xff0c;缓存系统使用Redis。管理后台则采用PHP语言开发。 客户端使用Cocos Creator进…

SpringBoot3集成Junit5

目录 1. 确保项目中包含相关依赖2. 配置JUnit 53. 编写测试类4、Junit5 新增特性4.1 注解4.2 断言4.3 嵌套测试4.4 总结 在Spring Boot 3中集成JUnit 5的步骤相对简单。以下是你可以按照的步骤&#xff1a; 1. 确保项目中包含相关依赖 首先&#xff0c;确保你的pom.xml文件中…

Google Guava 发布订阅模式/生产消费者模式 使用详情

目录 Guava 介绍 应用场景举例 1. 引入 Maven 依赖 2. 自定义 Event 事件类 3. 定义 EventListener 事件订阅者 4. 定义 EventBus 事件总线 5. 定义 Controller 进行测试 Guava 介绍 Guava 是一组来自 Google 的核心 Java 库&#xff0c;里面包括新的集合 类型&#xff08…

Idea如何推送项目到gitee

第一步&#xff1a;先在你的gitee创建一个仓库 第二步&#xff1a; 点击推送 点击定义远程&#xff0c;将URL换成你仓库的&#xff0c;填好你的用户名和密码 可以看到已经推送到仓库了

gdb和make工具

gdb工具&#xff1a; GDB的主要功能 断点设置&#xff1a;允许开发者在特定的代码行设置断点&#xff0c;当程序执行到该行时会自动暂停&#xff0c;方便开发者进行调试和分析。 变量查看与修改&#xff1a;在程序运行过程中&#xff0c;可以查看和修改变量的值&#xff0c;以…

一周内从0到1开发一款 AR眼镜 相机应用?

目录 1. &#x1f4c2; 前言 2. &#x1f4a0; 任务拆分 2.1 产品需求拆分 2.2 开发工作拆分 3. &#x1f531; 开发实现 3.1 代码目录截图 3.2 app 模块 3.3 middleware 模块 3.4 portal 模块 4. ⚛️ 拍照与录像 4.1 前滑后滑统一处理 4.2 初始化 View 以及 Came…

推荐一款功能强大的数据库开发管理工具:SQLite Expert Pro

SQLite Expert Professional是一个功能强大的工具&#xff0c;旨在简化SQLite3数据库的开发。 它是SQLite的一个功能丰富的管理和开发工具&#xff0c;旨在满足所有用户从编写简单SQL查询到开发复杂数据库的需求。 图形界面支持所有SQLite功能。 它包括一个可视化查询构建器&a…

C#与C++交互开发系列(十七):线程安全

前言 在跨平台开发和多线程编程中&#xff0c;线程安全是不可忽视的重要因素。C和C#中提供了各自的线程同步机制&#xff0c;但在跨语言调用中&#xff0c;如何确保数据一致性、避免数据竞争和死锁等问题&#xff0c;是开发人员必须考虑的重点。 本文将介绍在C#和C交互开发中确…

数据库SQL学习笔记

第 1 章 绪论 1.1 数据库系统概述 1.1.1 四个基本概念 数据库系统(DBS) 定义&#xff1a;是指在计算机系统中引入数据库后的系统构成 构成&#xff1a;数据库&#xff0c;数据库管理系统&#xff08;及其开发工具&#xff09;&#xff0c;应用系统&#xff0c;数据库管理员…

Java项目实战II基于Spring Boot的智慧生活商城系统的设计与实现(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 随着科技的飞速发展&#xff0c;人们的…

.net Core 使用Panda.DynamicWebApi动态构造路由

我们以前是通过创建controller来创建API&#xff0c;通过controller来显示的生成路由&#xff0c;这里我们讲解下如何不通过controller&#xff0c;构造API路由 安装 Panda.DynamicWebApi 1.2.2 1.2.2 Swashbuckle.AspNetCore 6.2.3 6.2.3添加ServiceAction…

[ 内网渗透实战篇-1 ] 单域环境搭建与安装域环境判断域控定位CS插件装载CS上线

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

还在使用ElementUI不如试一试DaisyUI,DaisyUI: Tailwind CSS 的高效组件库,

DaisyUI: Tailwind CSS 的高效组件库 daisyUI官网&#xff1a;https://daisyui.com/ 在现代网页开发中&#xff0c;快速构建美观且响应式的用户界面是每个开发者追求的目标。Tailwind CSS 是一个流行的实用程序优先的 CSS 框架&#xff0c;它允许开发者直接在 HTML 中使用预…

《大数据与人工智能:提升数据质量与数量的利器》

《大数据与人工智能&#xff1a;提升数据质量与数量的利器》 一、大数据与人工智能的融合趋势二、大数据增加数据数量的方法&#xff08;一&#xff09;不同途径的数据增量&#xff08;二&#xff09;数据增强的多样方法 三、人工智能提升数据数量的手段&#xff08;一&#xf…