Vue中的 * 及使用场景
作者:自xing且乐观~ 发布时间:2024-05-09 15:26:05
基本示例?
计算属性允许我们声明性地计算衍生值。然而在有些情况下,我们需要在状态变化时执行一些“副作用”:例如更改 DOM,或是根据异步操作的结果去修改另一处的状态。
在选项式 API 中,我们可以使用watch 选项在每次响应式属性发生变化时触发一个函数。
export default {
data() {
return {
question: '',
answer: 'Questions usually contain a question mark. ;-)'
}
},
watch: {
// 每当 question 改变时,这个函数就会执行
question(newQuestion, oldQuestion) {
if (newQuestion.includes('?')) {
this.getAnswer()
}
}
},
methods: {
async getAnswer() {
this.answer = 'Thinking...'
try {
const res = await fetch('https://yesno.wtf/api')
this.answer = (await res.json()).answer
} catch (error) {
this.answer = 'Error! Could not reach the API. ' + error
}
}
}
}
<p>
Ask a yes/no question:
<input v-model="question" />
</p>
<p>{{ answer }}</p>
watch
选项也支持把键设置成用.
分隔的路径:
export default {
watch: {
// 注意:只能是简单的路径,不支持表达式。
'some.nested.key'(newValue) {
// ...
}
}
}
深层 * ?
watch
默认是浅层的:被侦听的属性,仅在被赋新值时,才会触发回调函数——而嵌套属性的变化不会触发。如果想侦听所有嵌套的变更,你需要深层 * :
export default {
watch: {
someObject: {
handler(newValue, oldValue) {
// 注意:在嵌套的变更中,
// 只要没有替换对象本身,
// 那么这里的 `newValue` 和 `oldValue` 相同
},
deep: true
}
}
}
谨慎使用
深度侦听需要遍历被侦听对象中的所有嵌套的属性,当用于大型数据结构时,开销很大。因此请只在必要时才使用它,并且要留意性能。
即时回调的 * ?
watch
默认是懒执行的:仅当数据源变化时,才会执行回调。但在某些场景中,我们希望在创建 * 时,立即执行一遍回调。举例来说,我们想请求一些初始数据,然后在相关状态更改时重新请求数据。
我们可以用一个对象来声明 * ,这个对象有handler
方法和immediate: true
选项,这样便能强制回调函数立即执行:
export default {
// ...
watch: {
question: {
handler(newQuestion) {
// 在组件实例创建时会立即调用
},
// 强制立即执行回调
immediate: true
}
}
// ...
}
回调函数的初次执行就发生在created
钩子之前。Vue 此时已经处理了data,
computed
和methods
选项,所以这些属性在第一次调用时就是可用的。
回调的触发时机?
当你更改了响应式状态,它可能会同时触发 Vue 组件更新和 * 回调。
默认情况下,用户创建的 * 回调,都会在 Vue 组件更新之前被调用。这意味着你在 * 回调中访问的 DOM 将是被 Vue 更新之前的状态。
如果想在 * 回调中能访问被 Vue 更新之后的 DOM,你需要指明flush: 'post'
选项:
export default {
// ...
watch: {
key: {
handler() {},
flush: 'post'
}
}
}
this.$watch()?
我们也可以使用组件实例的$watch() 方法来命令式地创建一个 * :
export default {
created() {
this.$watch('question', (newQuestion) => {
// ...
})
}
}
如果要在特定条件下设置一个 * ,或者只侦听响应用户交互的内容,这方法很有用。它还允许你提前停止该 * 。
停止 * ?
用watch
选项或者$watch()
实例方法声明的 * ,会在宿主组件卸载时自动停止。因此,在大多数场景下,你无需关心怎么停止它。
在少数情况下,你的确需要在组件卸载之前就停止一个 * ,这时可以调用$watch()
API 返回的函数:
const unwatch = this.$watch('foo', callback)
// ...当该 * 不再需要时
unwatch()
来源:https://blog.csdn.net/weixin_45721753/article/details/130048873


猜你喜欢
- 1,查看log情况mysql> show global variables like '%log%';+-------
- 题目:给定两个自然数,求这两个数的最大公约数。分析:单看题目的话,非常简单,我们可以循环遍历自然数,如果能够整除两个自然数,就把这个数记下来
- 前言requests是Python发送接口请求非常好用的一个三方库,由K神编写,简单,方便上手快。但是requests发送请求是串行的,即阻
- 在实际的工作中,尤其是在生产环境里边,SQL语句的优化问题十分的重要,它对数据库的性能的提升也起着显著的作用.我们总是在抱怨机器的性能问题,
- 今天写了点东西,要计算时间差,我记得去年写过,于是今天再次mark一下,以免自己忘记In [27]: from datetime impor
- 一、InnoDB表级锁我们知道,InnoDB是支持行锁,但不是每次都获取行锁,如果不使用索引的,那还是获取的表锁。而且有的时候,我们希望直接
- 最近在工作中涉及到判断服务器所在ip反馈程序使用情况的程序主要要求就是,本机或局域网调试程序时,不反馈其域名(localhost)或ip站长
- python UDP通信1.打开虚拟通信程序,选择UDP通信并选定收发数据的ip地址和port端口:2.在虚拟机中编写python程序与主机
- Vue中有两个较为高级的静态方法mixin和extend,接下来我们来讨论下关于他们各自的原理和使用场景。Mixin:原理:先来看看官网的介
- 抢票脚本,python +splinter自动刷新抢票,可以成功抢到(依赖自己的网络环境太厉害,还有机器的好坏),但是感觉不是很完美。有大神
- 本文实例讲述了Django自定义过滤器定义与用法。分享给大家供大家参考,具体如下:一、自定义过滤器的介绍前面我们就介绍过过滤器其实就是一个函
- 实际的项目,存在多张表的关联关系。不可能在一张表里面就能检索出所有数据。如果没有表连接的话,那么我们就需要非常多的操作。比如需要从A表找出限
- 本文实例为大家分享了pygame实现移动底座弹球的具体代码,供大家参考,具体内容如下输出结果:实现代码:# -*- coding: utf-
- 这段代码用到vuejs和vue-resouece。实现对接智能提示接口,并通过上下键选择提示项,按enter进行搜索<!DOCTYPE
- Float(浮动)概念也许是CSS中最让人迷惑的一个概念吧。Float经常被错误理解,而且因为将上下文元素全部浮动导致的可读性、
- 基本介绍pandas是Python数据挖掘、数据分析中常用的库。而DataFrame生成excel中的sheet表,以及在excel中增加s
- 在传统的递归中,典型的模式是,你执行第一个递归调用,然后接着调用下一个递归来计算结果。这种方式中途你是得不到计算结果,知道所有的递归调用都返
- 本文主要介绍一下在学习可视化过程里遇到的一些情况比如cmap=plt.cm.Blues的映射import matplotlib.pyplot
- 🚀 文章简介 :本篇文章的实战部分中主要使用到了 MediaPipe 与 OpenCv 两个库,实现了隔空操作的效果,主要有**隔空操作鼠标
- 本文我们为大家介绍 Python3 使用 PyMySQL 连接数据库,并实现简单的增删改查。什么是 PyMySQL?PyMySQL 是在 P