vue2基础组件通信案例练习:把案例Todo-list改写成本地缓存

news/2025/1/20 5:52:00/文章来源:https://www.cnblogs.com/bigcat26/p/18514703

@

目录
  • 概述
  • 前端代码
  • 本人其他相关文章链接

概述

前面文章案例已经练习了父子组件之间的通信,这一节讲述如何把todos数组放进本地缓存中,因为实际开发场景中频繁查询的数据很有可能会用到本地缓存技术。

思考:如何改成使用本地缓存,是写一堆按钮每次触发就是往本地缓存种get和set?答案是错误的,因为太复杂了会写一堆的get和set方法

正确答案:使用监听watch属性,因为只要监听到数据改变 =》 往本地缓存种添加监听改变后的数据就行,这样就能实现本地缓存的更新。

前端代码

App.vue 只写了代码不同的地方

export default {
data() {return {//由于todos是MyHeader组件和MyFooter组件都在使用,所以放在App中(状态提升)todos:JSON.parse(localStorage.getItem('todos')) || []}},watch: {todos:{deep:true,handler(value){localStorage.setItem('todos',JSON.stringify(value))}}}
}

注意点1:该案例只是把之前Todo-list案例的数组放到本地缓存中保存

注意点2:handler(value)中因为我们只用到新值,所以只写一个value即可,省略了oldValue,之前的长这样handler(newValue, oldValue)

注意点3:默认网站会把todos数组自动调用.toString()方法,会导致本地缓存中保存的值为[Object Object],所以需要JSON.parse()方法转换

注意点4:

问题:为啥JSON.parse()最后要拼接个“|| []”?

答案:当todos没有任何一条记录时,执行JSON.parse(localStorage.getItem('todos'))其值为null,而下方组件MyFooter.vue会继续使用todos.length就会导致报错,所以采用拼接“|| []”,依据是 null || [] 输出表达式值为 [],即||前方有值就返回该值,如果||前方为null,则整体表达式值为[]

注意点5:

问题:使用watch监听后,新增和修改按钮为啥能实现本地缓存的新增和删除?

答案: 因为watch监听的是整个todos,而handler(value)中的value就代表改变值后的todos,只需要把todos重新设置到本地缓存中,就实现了本地缓存的更新操作。

注意点6:

问题:为啥watch要开启深度监听?

答案:因为默认watch监听的是浅层次的,即todos保存的是对象,而用户在勾选每一项时如果不开启深度监听,就会导致用户每次勾选时并不会修改本地缓存中的数据checked状态,从而用户刷新时页面就变回之前没勾选的状态了,所以为了保持监听数据一致性必须开启深度监听。

本人其他相关文章链接

1.《基础篇第1章:vue2简介》包含Vue2知识点、个人总结的使用注意点及碰到的问题总结

2.《基础篇第2章:vue2基础》包含Vue2知识点、个人总结的使用注意点及碰到的问题总结

3.《进阶篇第3章:vue进阶-组件》包含组件、自定义事件、插槽、路由等等扩展知识点

4.《基础篇第4章》:使用vue脚手架创建项目

5.vue2知识点:数据代理

6.vue2知识点:事件处理

7.vue2知识点:列表渲染(包含:v-for、key、取值范围、列表过滤、列表排序、vue监视对象或数组的数据改变原理、总结vue数据监测)

8.vue2知识点:计算属性与监听属性

9.vue2知识点:生命周期(包含:生命周期介绍、生命周期钩子、整体流程图详解)

10.vue2知识点:非单文件组件和单文件组件

11.vue2知识点:组件is属性

12.vue2知识点:组件模板定义

13.vue2知识点:组件的props属性、非props属性、props属性校验

14.vue2知识点:组件自定义事件

15.vue2知识点:组件插槽分发

16.vue2知识点:动态组件

17.vue2知识点:混入

18.vue2知识点:浏览器本地缓存

19.vue2知识点:全局事件总线(GlobalEventBus)

20.vue2知识点:消息订阅与发布

21.vue2知识点:nextTick语法

22.vue2知识点:Vue封装的过度与动画

23.vue2知识点:路由

24.vue2知识点:vm调用待$命令介绍

25.vue组件通信案例练习(包含:父子组件通信及平行组件通信)

26.vue表单案例练习:vue表单创建一行数据及删除数据的实现与理解

27.vue2基础组件通信案例练习:待办事项Todo-list案例练习

28.vue2基础组件通信案例练习:把案例Todo-list改写成本地缓存

29.vue2基础组件通信案例练习:把案例Todo-list改成使用自定义事件

30.vue2基础组件通信案例练习:把案例Todo-list改成使用全局事件总线

31.vue2基础组件通信案例练习:把案例Todo-list改成使用消息订阅与发布

32.vue2基础组件通信案例练习:把案例Todo-list新增编辑按钮

33.vue2基础组件通信案例练习:把案例Todo-list改成使用动画与过度

34.学习vue2遇到过的问题及个人总结

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Webstorm 2024 安装使用 (附加永久激活码、补丁)

下载安装第二步,安装完成之后,下载补丁 下载地址(里面包含激活码)完成,之后输入激活码免责声明:本文中的资源均来自互联网,仅供个人学习和交流使用,严禁用于商业行为,下载后请在24小时内从电脑中彻底删除。对于因非法使用而引起的版权争议,与作者无关。所有资源仅供学习…

高级语言程序设计课程第五次个人作业

这个作业属于哪个课程:https://edu.cnblogs.com/campus/fzu/2024C/ 这个作业要求在哪里: https://edu.cnblogs.com/campus/fzu/2024C/homework/13298 学号:<102400229> 姓名:<杨灿> 书本第8章8.11编程练习题目中的第1题 没有问题书本第8章8.11编程练习题目中的…

代码生产力提高100倍,Claude-3.5 +Cline 打造超强代码智能体!小白也能开发各种app!

嘿,各位小伙伴们。 今天,带大家走进神奇的 AI 世界,一起探索强大的工具和技术。 最近,Anthropic 发布了全新的 Claude-3.5-sonnet 模型,这可是 Claude-3.5-sonnet 模型的升级版哦!这款最新的模型在多方面的能力都有了显著提升,尤其是在编程方面。已经完全超越 GPT 模型,…

在线协作产品有哪些

在线协作产品主要有以下四类:一、通信工具,如Slack、Microsoft Teams、Zoom;二、文件共享与协作,如Google Workspace、Dropbox、Microsoft OneDrive;三、项目管理与任务追踪,如Trello、Asana、JIRA;四、设计与创作协作,如Figma、Adobe Creative Cloud、Canva。通信工具…

AEER-Applied Ecology and Environmental Research

生态环境、生物地理学、动物学、植物学、古生物学、生物计量学、生物数学和定量的生态学或多学科农业研究。@目录一、征稿简介二、重要信息三、服务简述四、投稿须知 一、征稿简介二、重要信息期刊官网:https://ais.cn/u/3eEJNv三、服务简述 生态环境、生物地理学、动物学、植…

学习笔记(十二):ArkUi-相对布局 (RelativeContainer)

基本概念锚点:通过锚点设置当前元素基于哪个元素确定位置。对齐方式:通过对齐方式,设置当前元素是基于锚点的上中下对齐,还是基于锚点的左中右对齐。锚点设置 锚点设置是指设置子元素相对于父元素或兄弟元素的位置依赖关系。 在水平方向上,可以设置left、middle、right的锚…

Dingdone和Apicloud开发出的APP的区别在哪里

Dingdone和Apicloud是两个流行的移动应用开发平台,它们在许多方面具有不同的特点和优势。本文将详细探讨:1、开发环境和工具集的差异;2、编程语言和框架支持的对比;3、开发效率和灵活性的区别;4、社区支持和资源的差异。例如,Dingdone可能更专注于提供快速开发的解决方案…

GeoChat论文阅读

GeoChat 任务 图像级对话任务 在此任务中,GeoChat 处理图像和用户文本查询,利用图像的全局上下文执行对话的任务。 区域级对话任务 在图像输入中向 GeoChat 提供空间框位置 ( b ),指导模型关注图像中的特定区域,执行区域级的对话任务。 具体化对话任务 通过使用特殊的标记,…

lvgl8图像改成lvgl9图像的方法(c文件)

[1] 离线png->c的工具: LittlevGL - 里飞网 - Powered by Discuz! LvglImgTool更新V0.2版本 - LittlevGL - 里飞网 - Powered by Discuz! Lvgl_image_convert_tool: 基于LVGl图片转换离线版封装的小工具,不仅有界面,还可以一键生成到项目里哦 问题 通过Image Converter —…

JY901 ROS1使用经验

参考: 维特智能官方ROS Python使用说明https://wit-motion.yuque.com/wumwnr/ltst03/lu0v13?#0246cb6a 安装配置步骤:先在VirtualBox中为这个包配置对应的环境:Ubuntu 16.04, ROS(1)Kinetic, Python 2.7. 按照上面参考链接,从【3.IMU软件包使用】开始一步一步做。使用步骤…

变电站设备状态识别监测智能巡视系统

变电站设备状态识别监测智能巡视系统利用先进的图像处理和机器学习技术,变电站设备状态识别监测智能巡视系统通过变电站现场的监控摄像机对设备状态进行实时监测。系统能够自动识别配电箱闸刀的开合状态。通过与旁边的标准位置线进行比较,系统能够准确判断配电箱闸刀的开合情…

项目管理与运作管理的区别

项目管理和运作管理都是组织中不可或缺的管理方式,但它们具有显著的差异。包括:1.目的和范围不同;2.持续性和周期性的差异;3.风险和复杂性的差别;4.资源分配和优化;5.团队结构和组织;6.衡量和评价的标准;7.交付和成果的差异。了解这些差异有助于更好地决定何时应用哪种…