首页 > 其他分享 >vue2基础组件通信案例练习:把案例Todo-list改写成本地缓存

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

时间:2024-10-29 23:13:17浏览次数:1  
标签:知识点 缓存 list 案例 vue2 组件 todos

@

目录

概述

前面文章案例已经练习了父子组件之间的通信,这一节讲述如何把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遇到过的问题及个人总结

标签:知识点,缓存,list,案例,vue2,组件,todos
From: https://www.cnblogs.com/bigcat26/p/18514703

相关文章

  • vue表单案例练习:vue表单创建一行数据及删除数据的实现与理解
    如何使用Vue:基本结构:1、引入Vue的核心JS文件2、准备Dom结构3、实例化组件通过el属性,挂载元素,绑定id为app的html元素通过data属性,定义数据,可以在html代码段中显示的数据4、获取数据数据绑定最常见的形式就是使用“Mustache”语法(双大括号)的文本插值@目录目标两个例......
  • XSS案例分析和规避
    1.什么是XSS跨站脚本(XSS)是一种安全漏洞,允许攻击者向网站注入恶意客户端代码。该代码由受害者执行从而让攻击者绕过访问控制并冒充用户。XSS可能导致cookie、token等用户敏感信息被窃取,或者HTML被重写。下面是一个极简易的新闻发布功能的案例,前端获取用户输入的标题和新闻内容,服......
  • Android实现ListView嵌套Checkbox真正的多选、全选、反选 (附完整源码)
    Android实现ListView嵌套Checkbox真正的多选、全选、反选1.创建项目2.添加布局文件3.创建数据模型4.创建自定义Adapter5.实现MainActivity6.运行项目在Android中实现一个包含复选框的ListView,并支持多选、全选和反选的功能,可以按照以下步骤进行。我们将......
  • KingbaseES V8R6集群部署案例之---install.conf配置错误
    案例说明:KingbaseESV8R6集群在通过脚本部署时,提示节点无法通过securcmdd连接,部署失败。适用版本:KingbaseESV8R6一、问题现象如下所示,在执行脚本部署时,提示无法和集群节点通过8890端口建立连接:二、问题分析1、测试节点securecmdd互信连接如下所示,节点之间securecmdd......
  • axios请求封装(vue2)
    importaxiosfrom'axios';import{ElLoading,ElMessage}from'element-plus';import{RefreshToken}from'@/request';import{getlocalStorage,setlocalStorage}from'@/utils/common.js';constpendingMap=new......
  • CesiumJS 案例 P11:添加图片图层异常、添加标记、添加标记并指定大小、添加标记并指定
    CesiumJSCesiumJSAPI:https://cesium.com/learn/cesiumjs/ref-doc/index.htmlCesiumJS是一个开源的JavaScript库,它用于在网页中创建和控制3D地球仪(地图)一、添加图片图层异常<!DOCTYPEhtml><htmllang="en"> <head> <metacharset="UTF-8"/>......
  • CesiumJS 案例 P10:带边框的图片图层(Entity polyline 实现、Entity polygon 实现、Enti
    CesiumJSCesiumJSAPI:https://cesium.com/learn/cesiumjs/ref-doc/index.htmlCesiumJS是一个开源的JavaScript库,它用于在网页中创建和控制3D地球仪(地图)一、带边框的图片图层(Entitypolyline)<!DOCTYPEhtml><htmllang="en"> <head> <metacharset="U......
  • Java常见List面试题
    前言本来想着给自己放松一下,刷刷博客,突然被几道面试题难倒!获取一个类Class对象的方式有哪些?ArrayList和LinkedList的区别有哪些?用过ArrayList吗?说一下它有什么特点?有数组了为什么还要搞个ArrayList呢?说说什么是fail-fast?似乎有点模糊了,那就大概看一下Java基础面试......
  • zblog获取tag列表函数GetTagList参数和使用方法介绍说明
    函数位置:zblogphp.php文件,大约2641行。函数参数:$select:数组,获取指定数据。$where:数组,数据获取限制规则。$order:数组,数据获取排序规则。$limit:数组,获取数据数量限制。$option:数组,附加限制选项,可用来获取指定范围内的数据。函数输出:输出一个数组。示例:{......
  • vue2-自定义全局toast提示插件
    编写toast.vue在components文件夹下新增toast文件夹,并在toast文件夹中新增index.vue文件`<template><divid="toast"><spanclass="toast"@mouseleave="start"@mouseenter="stop":style="{top:styleTop,colo......