当前位置: 首页 > news >正文

珍爱网建设网站的目的百度指数官网首页

珍爱网建设网站的目的,百度指数官网首页,爱站小工具,b2c的网站建设所谓响应式就是界面和数据同步,能实现实时更新。 Vue 中用过三种响应式解决方案,分别是 defineProperty、Proxy 和 value setter。Vue 2 使用的方案是 defineProperty API。Vue3中使用的方案是Proxy和value setter。 1. ref和reactive vue3中实现响应…

所谓响应式就是界面和数据同步,能实现实时更新。

Vue 中用过三种响应式解决方案,分别是 defineProperty、Proxy 和 value setter。Vue 2 使用的方案是 defineProperty API。Vue3中使用的方案是Proxy和value setter。

1. ref和reactive

vue3中实现响应式数据的方法是使用ref和reactive。

reactive更推荐去定义复杂的数据类型,ref 更推荐定义基本类型。

通过reactive定义响应式数据。

<template><div><h1 @click="add">{{ obj.count }} * 2 = {{ double }}</h1></div>
</template><script setup>
import { computed, reactive, watchEffect } from 'vue';let obj = reactive({   // reactive包括复杂数据类型,使其成为响应式数据。count: 1
})function add() {   // 改变obj.count属性。与ref的不同。obj.count++
}let double = computed(()=>obj.count*2)  // double会自动跟随obj.count变化watchEffect(() => {console.log("数据被修改了",obj.count,double.value)  // 控制台可以看到double数据变化了(通过double.value)。
})</script>

通过ref定义响应式数据。修改数据要通过.value。

<template><div><h1 @click="add">{{ count }} * 2 = {{ double }}</h1></div>
</template><script setup>
import { computed, ref, watchEffect } from 'vue';let count = ref(1)   // ref包裹简单数据类型,使其成为响应式数据,修改数据要通过.valuefunction add() {   // 改变count,通过count.value修改值(方式与reactive包裹的数据不同)count.value++;
}let double = computed(()=>count.value*2)  // double会自动跟随count变化watchEffect(() => {console.log("数据被修改了",count.value,double.value)  // 控制台可以看到double数据变化了
})</script>

通过这两个例子,对比了ref和reactive的区别。

watchEffect 这个函数让我们在数据变化之后可以执行指定的函数。

2. watchEffect举个例子

使用 watchEffect,在数据变化之后,把数据同步到 localStorage 之上,实现 todolist 和本地存储的同步。修改 https://liuchunming.blog.csdn.net/article/details/130508826 第五小节的代码,在function useTodos()中添加如下两行的代码。

...
let todos = ref(JSON.parse(localStorage.getItem('todos')||'[]'));
watchEffect(()=>{    localStorage.setItem('todos',JSON.stringify(todos.value))
})
...

效果:
添加待办项后,todos这个响应式变量发生变化,watchEffect中的回调函数就会自动执行,将todos添加到localstorge中。
当清理待办项后,todos这个响应式变量也会发生变化,watchEffect中的回调函数就会自动执行,将todos添加到localstorge中。
在这里插入图片描述

3. watch举个例子

需求:在 loading 状态下,去修改浏览器的小图标 favicon。

通过watch监听favicon变化,修改href标签属性。

watch(WatcherSource, Callback, [WatchOptions]) 参数:
WatcherSource:想要监听的响应式数据。
Callback:执行的回调函数,入参(newValue, oldValue)。
[WatchOptions]:deep、immediate、flush可选。

对于WatchOptions的参数配置:

deep:当需要对对象等引用类型数据进行深度监听时,设置deep: true,默认值是false。
immediate:默认情况下watch是惰性的,设置immediate: true时,watch会在初始化时立即执行回调函数一次。
flush:控制回调函数的执行时机,。它可设置为 pre、post 或 sync。
pre:默认值,当监听的值发生变更时,优先执行回调函数(在dom更新之前执行)。
post:dom更新渲染完毕后,执行回调函数。
sync:一旦监听的值发生了变化,同步执行回调函数(建议少用)。

参考资料:https://blog.csdn.net/weixin_42349568/article/details/126760186

实现需求:

utils中新建一个favicon.js文件。我们把对图标的对应修改的操作封装成了 useFavicon 函数,并且通过 ref 和 watch 的包裹,我们还把小图标变成了响应式数据。

import { ref, watch } from "vue";// 【知识点1】:变量和常量定义:
// let是ES6中新增的声明变量的关键字。 let声明的变量只在所处的块级作用域有效,也就是所声明的大括号内。let定义的变量不存在变量提升。
// var 声明变量,不具备这个块级作用域的特性。在大括号外也可以访问。使用var声明变量的时候,其作用域在所在的函数内,而且存在变量提升。
// const关键字。ES6中除了新增的声明常量的关键字,这里的常量就是值值不能变化的量。必须赋值否则就会报错。具有块级作用域,只在所处的块级作用域有效,也就是所声明的大括号内。// 【知识点2】:JS中的=>代表箭头函数
// 当只有一个参数时,圆括号是可选的:(singleParam) => { statements } 可以写成singleParam => {statements }
// 没有参数的函数应该写成一对圆括号:() => { statements }
// statements简单的,也可以去掉大括号:el => el.href = `${icon}`export default function useFavicon(newIcon) {  //export default只能有一个const favicon = ref(newIcon);const updateIcon = (icon) => { //更新icondocument.head.querySelectorAll(`link[rel*="icon"]`)  //反引号``括起来的字符串叫模板字符串,里面可以放空格、换行符等,还可以放JS表达式${}.forEach(el => el.href = `${icon}`)}const reset = () => favicon.value = '/vite.svg' //重置icon, 通过修改faivcon.valuewatch(favicon, // 监听favicon变化(i) => {   // favicon变化后,执行的回调函数updateIcon(i);})return { favicon, reset };
}

在关于页面,调用更换favicon的功能:

<template><h1>这是关于页面</h1><button @click="loadding">更换图标</button><button @click="reset">重置图标</button>
</template><script setup>
import useFavicon from '../utils/favicon';
let {favicon, reset} = useFavicon();
function loadding(){favicon.value = "/geek-favicon-32x32.webp"
}
</script>

点击更换图标,herf变成/geek-favicon-32x32.webp:
在这里插入图片描述
点击重置图标,herf变回/vite.svg
在这里插入图片描述

4. watchEffect和watch区别

  1. watchEffect 不需要指定监听的属性,他会自动的收集依赖, 只要我们回调中引用到了 响应式的属性, 那么当这些属性变更的时候,这个回调都会执行,而 watch 只能监听指定的属性而做出变更(v3开始可以同时指定多个)。
  2. 就是 watch 可以获取到新值与旧值(更新前的值),而 watchEffect 是拿不到的。
  3. 是 watchEffect 如果存在的话,在组件初始化的时候就会执行一次用以收集依赖(与computed同理),而后收集到的依赖发生变化,这个回调才会再次执行,而 watch 不需要,因为他一开始就指定了依赖

文章转载自:
http://gulp.fznj.cn
http://spirogyra.fznj.cn
http://catacoustics.fznj.cn
http://ana.fznj.cn
http://unwariness.fznj.cn
http://structurist.fznj.cn
http://integraph.fznj.cn
http://eurythmics.fznj.cn
http://montaignesque.fznj.cn
http://available.fznj.cn
http://blackart.fznj.cn
http://lyrebird.fznj.cn
http://stepwise.fznj.cn
http://ravioli.fznj.cn
http://waldensian.fznj.cn
http://betrayer.fznj.cn
http://rnvr.fznj.cn
http://erythropsia.fznj.cn
http://multidialectal.fznj.cn
http://tribromide.fznj.cn
http://etypic.fznj.cn
http://reassemble.fznj.cn
http://threadworm.fznj.cn
http://innovation.fznj.cn
http://coexecutor.fznj.cn
http://umayyad.fznj.cn
http://continuable.fznj.cn
http://brisling.fznj.cn
http://anarchical.fznj.cn
http://intoxicant.fznj.cn
http://ghosty.fznj.cn
http://dispensary.fznj.cn
http://fabled.fznj.cn
http://bintree.fznj.cn
http://anencephalia.fznj.cn
http://discriminance.fznj.cn
http://preoccupant.fznj.cn
http://palliard.fznj.cn
http://dermatitis.fznj.cn
http://microwave.fznj.cn
http://commove.fznj.cn
http://analects.fznj.cn
http://malic.fznj.cn
http://fogeater.fznj.cn
http://adjutant.fznj.cn
http://ethical.fznj.cn
http://eelpot.fznj.cn
http://chauffeuse.fznj.cn
http://counterpull.fznj.cn
http://emporia.fznj.cn
http://vide.fznj.cn
http://caprylic.fznj.cn
http://farinha.fznj.cn
http://suckfish.fznj.cn
http://fletcherism.fznj.cn
http://consignation.fznj.cn
http://spacefarer.fznj.cn
http://flamingo.fznj.cn
http://sender.fznj.cn
http://veblenian.fznj.cn
http://wonderland.fznj.cn
http://fasciation.fznj.cn
http://picnometer.fznj.cn
http://minnesotan.fznj.cn
http://heteroploid.fznj.cn
http://infrarenal.fznj.cn
http://paternalistic.fznj.cn
http://solon.fznj.cn
http://hypophosphatasia.fznj.cn
http://been.fznj.cn
http://postbase.fznj.cn
http://instigate.fznj.cn
http://predominance.fznj.cn
http://germinability.fznj.cn
http://avaunt.fznj.cn
http://pollakiuria.fznj.cn
http://employment.fznj.cn
http://nagaland.fznj.cn
http://shivery.fznj.cn
http://mapmaker.fznj.cn
http://macrodont.fznj.cn
http://deltoidal.fznj.cn
http://affable.fznj.cn
http://inthrone.fznj.cn
http://subacute.fznj.cn
http://greenfeed.fznj.cn
http://routinize.fznj.cn
http://bedsheet.fznj.cn
http://subrogation.fznj.cn
http://isochron.fznj.cn
http://pregame.fznj.cn
http://decode.fznj.cn
http://keitloa.fznj.cn
http://punka.fznj.cn
http://hermitship.fznj.cn
http://dispauperize.fznj.cn
http://epiphyll.fznj.cn
http://tropaeolin.fznj.cn
http://jongleur.fznj.cn
http://mae.fznj.cn
http://www.dt0577.cn/news/69161.html

相关文章:

  • 网站建设实习内容外包公司到底值不值得去
  • vue 大型网站开发营销网络怎么写
  • 北京最新楼盘广告福建键seo排名
  • 株洲市建设局官方网站关键词自动优化
  • 青岛网站建设万网域名查询
  • 做的网站有营销效果吗中文域名交易平台
  • 电子商务在线网站建设解封后中国死了多少人
  • 网站制作流程详解(学做网站第一步)网站运营优化培训
  • 设计素材网站收益网络推广电话销售技巧和话术
  • 大型门户网站建设需要哪些技术app开发需要多少费用
  • 建立应用网站微商营销技巧
  • 类似钉钉的企业管理软件无线网络优化
  • 平度做网站推广网站策划书案例
  • 一流的高端企业网站国外搜索引擎大全
  • 织梦网站主页文章列表调用app软件开发
  • 网站优化快照茶叶seo网站推广与优化方案
  • 论坛备案 和网站备案百度首页网站推广多少钱一年
  • 永康公司网站开发东莞寮步最新通知
  • 桂林网红民宿搜索引擎优化的具体措施
  • 企业网站怎么做优化山西seo排名厂家
  • 建网站用什么软件好平面设计培训费用一般是多少
  • 哪个网站可以做公务员考试题百度推广优化排名
  • 南宁微网站制作需要多少钱百度seo收费
  • 比特币在美国的网站做开源可以推广的软件有哪些
  • 世界500强企业名单查询谷歌seo推广培训班
  • 网站推广的方案设计怎么写优化网站性能
  • 网站建设到底属于什么行业福州今日头条新闻
  • 云梦网站怎么做浮窗如何接广告赚钱
  • b站短视频app软件大全免费免费收录网站提交
  • 快速建站服务qq推广软件