vue中ref和watch的使用

一、ref简介

ref 被用来给元素或子组件注册引用信息。引用信息将会注册在父组件的 $refs 对象上。如果在普通的 DOM 元素上使用,引用指向的就是 DOM 元素;如果用在子组件上,引用就指向组件.

二、watch简介

一个对象,键是需要观察的表达式,值是对应回调函数。值也可以是方法名,或者包含选项的对象。Vue 实例将会在实例化时调用 $watch(),遍历 watch 对象的每一个 property。简而言之watch是数据监听作用。
注意:不建议使用watch,它会持续监听属性的状态,会耗费项目性能,用来调试还是可以的

二、案例

①index.html

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

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- cdn是一种引入 -->
    <script src="https://cdn.jsdelivr.net/npm/vue"></script>
    <!-- 这里用link印入 -->
    <link rel="stylesheet" href="styles.css">
    <title>vue-cdn</title>
</head>

<body>
    <div id="vue-app">
        <h1>ref</h1>
        <label>姓名</label>
        <!-- 标记ref,就可以通过refs获取到ref的名字,也就是当前的元素对象,可以拿来获取当前元素,也可以拿来获取一整个容器 -->
        <input type="text" ref="name" @keyup="getName" />
        <span>{{ name }}</span>

        <label>年龄</label>
        <input type="text" ref="age" @keyup="getAge" />
        <span>{{ age }}</span>
    </div>
</body>

<script src="app.js"></script>

</html>

②app.js

new Vue({
    el: "#vue-app",
    data() {
        return {
            name: '',
            age: 32
        };
    },

    methods: {
        getName() {
            //console.log(this.$refs.name.value); //这样name.value是获取到name的值
            this.name = this.$refs.name.value;
        },
        getAge() {
            this.age = this.$refs.age.value;
        }
    },
    //watch不放在methos里面
    watch: {
        name(val, oldVal) {
            console.log(val, oldVal); //(现在的值,上一个值)
        },
        age(val, oldVal) {
            console.log(val, oldVal);
        }
    }

})
### 如何在 Vue使用 `watch` 监听 `ref` 在 Vue 组件中,可以利用组合式 API 或选项式 API 来实现对响应式数据的监听。对于 `ref` 的变化监控,在现代 Vue 版本(Vue 3.x),推荐采用组合式 API 方式来处理。 #### 使用组合式 API 实现 通过定义一个由 `ref()` 创建的数据属性,并借助于 `watchEffect()` 或者 `watch()` 函数来进行侦测其变动情况: ```javascript import { defineComponent, ref, watch } from 'vue'; export default defineComponent({ setup() { const count = ref(0); // 当count发生变化时触发回调函数 watch(count, (newVal, oldVal) => { console.log(`Count changed from ${oldVal} to ${newVal}`); }); return { count, }; }, }); ``` 如果希望只关注特定依赖项的变化而不立即执行副作用,则可以选择 `watch` 而不是 `watchEffect`[^1]。 #### 使用选项式 API 实现 当项目还在使用 Vue 2.x 或偏好传统写法的情况下,可以在组件内部声明周期钩子外设置 watcher 对象来监视指定变量: ```javascript data() { return { message: '', } }, mounted(){ this.message = "hello"; }, watch: { message(newValue, oldValue){ console.log('message has been updated', newValue, oldValue); } } ``` 上述两种方法都可以有效地监测到基于 `ref` 定义的状态改变事件并作出相应反应。值得注意的是,虽然这里展示的例子都是针对简单类型的 `ref` 变量操作,但对于复杂对象同样适用,只需注意深浅拷贝的区别即可[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值