首页 > 其他分享 >vue3 基础-API-watch 和 watchEffect

vue3 基础-API-watch 和 watchEffect

时间:2022-11-20 10:06:40浏览次数:56  
标签:const name reactive age watch watchEffect API nameObj


watch 和 watchEffect

前篇对 computed 属性如何在 api 中基本使用, 即从 vue 中引入, 然后通过直接传函数或者传对象的方式, 开箱即用, 非常清晰易懂. 本篇继续来对之前的 watch 进行扩展使用啦.

watch

<!DOCTYPE html>
<html lang="en">

<head>
<title>watch</title>
<script src="https://unpkg.com/vue@3"></script>
</head>

<body>
<div id="root"></div>
<script>
// watch 监听器
const app = Vue.createApp({
setup () {
const { ref, watch } = Vue
const name = ref('youge')

// 具备一定的 lazy 惰性加载
// 参数可以拿到之前值和当前值
watch(name, (curValue, prevValue) => {
console.log(curValue, prevValue)
})

return { name }
},
template: `
<div>
<div>
name: <input v-model="name" />
</div>
<div>
name is: {{name}}
</div>
</div>
`,
})

const vm = app.mount('#root')

</script>
</body>

</html>

当然对于 reactive 的数据也是类似的写法啦, watch 这里要写成箭头函数就行.

setup () {
const { reactive, toRefs, watch } = Vue
const nameObj = reactive({ name: 'youge' })

watch( () => nameObj.name, (curValue, prevValue) => {
console.log(curValue, prevValue)
})

const { name } = toRefs(nameObj)

return { name }
}

当然还可以监听多个内容的, 即通过数组参数的形式哦.

<!DOCTYPE html>
<html lang="en">

<head>
<title>watch</title>
<script src="https://unpkg.com/vue@3"></script>
</head>

<body>
<div id="root"></div>
<script>
// watch 监听器, 可监听多个对象
const app = Vue.createApp({
setup () {
const { reactive, toRefs, watch } = Vue
const nameObj = reactive({ name: 'youge', age: 18 })

watch( [() => nameObj.name,
() => nameObj.age
],
([curName, prevName], [curAge, prevAge]) => {
console.log('在监听', curName, prevName, '----', curAge, prevAge)
})

const { name, age } = toRefs(nameObj)

return { name, age }
},
template: `
<div>
<div>
name: <input v-model="name" />
</div>
<div>
name is: {{name}}
</div>
<div>
age: <input v-model="age" />
</div>
<div>
age is: {{name}}
</div>
</div>
`,
})

const vm = app.mount('#root')

</script>
</body>

</html>

梳理一下关于 watch 的特点无非就是:

  • 具备一定的 lazy
  • 参数可以拿到 prev 和 current
  • 可监听多个数据变化, 用一个监听器, 数组传参的方式

watchEffect

它是一个新增的, 和 watch 的不同在于:

  • 立即执行, 没有惰性
  • 无需传递要监听的内容, 会自动感知代码依赖, 只需传递一个回调即可
  • 不能获取之前数据的值
<!DOCTYPE html>
<html lang="en">

<head>
<title>watchEffect</title>
<script src="https://unpkg.com/vue@3"></script>
</head>

<body>
<div id="root"></div>
<script>
// watch 监听器
const app = Vue.createApp({
setup () {
const { reactive, toRefs, watch } = Vue
const nameObj = reactive({ name: 'youge', age: 18 })

watch( [() => nameObj.name,
() => nameObj.age
],
([curName, prevName], [curAge, prevAge]) => {
console.log('在监听', curName, prevName, '----', curAge, prevAge)
})

// 立即执行, 没有惰性
// 无需传递要监听的内容, 会自动感知代码依赖, 只需传递一个回调即可
// 不能获取之前数据的值
watchEffect(() => {
console.log(nameObj.name)
})


const { name, age } = toRefs(nameObj)

return { name, age }
},
template: `
<div>
<div>
name: <input v-model="name" />
</div>
<div>
name is: {{name}}
</div>
<div>
age: <input v-model="age" />
</div>
<div>
age is: {{name}}
</div>
</div>
`,
})

const vm = app.mount('#root')

</script>
</body>

</html>

耐心和恒心, 总会获得回报的.



标签:const,name,reactive,age,watch,watchEffect,API,nameObj
From: https://blog.51cto.com/u_14195239/5871248

相关文章

  • posix API的一些理解
    TCPPosixAPI的理解我们主要从TCP连接讲解整个的流程。连接的建立消息的收发连接的断开连接的建立先看一下一个TCPserver的创建过程。#include<stdio.h>#inclu......
  • Android 利用和风天气API显示实时天气
    最近开发遇到了这样的需求,需要在APP中显示出实时天气等信息,可以利用和风天气提供的API,免费订阅可以使用一定数量的查询额度,不过也差不多够用了。进入和风天气官网,注册。......
  • 如何使用C# Stopwatch 测量微秒级精确度
    跟同事讨论到-用C#Stopwatch取得效能数值,Stopwatch.ElapsedMilliseconds只到毫秒(ms),如果需要更高的时间精确度(微秒μs,甚至奈秒ns),该怎么做?原以为要费番功夫,在Stacko......
  • JKD8新的时间API
     packageA_ShangGuiGu.DateTimeTest;importorg.junit.Test;importjava.time.LocalDate;importjava.time.LocalDateTime;importjava.time.LocalTime;publicclassJ......
  • web开发模式和API接口
    1.web开发模式1前后端混合开发---前后端不分离返回html内容2.前后端分离#专注写json格式的数据xml页面静态化API接口......
  • LyScriptTools 扩展Script类API手册
    纯脚本类的功能实现都是调用的x64dbg命令,目前由于run_command_exec()命令无法返回参数,故通过中转eax寄存器实现了取值,目前只能取出整数类型的参数。Script类内函数名......
  • 通过 API 快速创建 AlertManager silence
    概述通常我们要silence某个AlertManager的alert时,需要通过UI界面操作,如下图:效率有点低,而且不够自动化,那么是否可以有一种办法快速创建AlertManagersilence呢?......
  • 通过 API 快速创建 AlertManager silence
    概述通常我们要silence某个AlertManager的alert时,需要通过UI界面操作,如下图:效率有点低,而且不够自动化,那么是否可以有一种办法快速创建AlertManagersilence呢......
  • docker registry api
    目录removeregistryregistryapiregistryapitestdeletebyhttp批量删除脚本linux查找命令removeregistryhttps://stackoverflow.com/questions/43666910/remove-......
  • Selenium3自动化测试实战--第4章 WebDriver API 2--显示等待和隐式等待
    4.7设置元素等待分显式等待和隐式等待4.7.1显式等待是Webdriver等待某个条件成立时则继续执行,否则在达到最大时长时抛出超时异常官网原文:显示等待是selenium客户可......