码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【vue3】12.跟着官网学习vue3-侦听器,watch方法


    每日鸡汤:你继续堕落下去的话,你的天赋将全部被收走,那些原本比你差的人也会一个个的努力超过你

    目录

    前言

    一、基本知识

    1. 计算属性 vs watch

    2. watchEffect

    二、用watch实现模态框组件

    1.自己手写模态框

    2.封装组件

    总结


    前言

    本篇文章对应官网【侦听器】


    一、基本知识

    1. 计算属性 vs watch

    关于计算属性和它的基本应用场景我们已经学过,请看我的这篇文章

    【vue3】05. 跟着官网学习vue3-计算属性,computed_我有一棵树的博客-CSDN博客跟着官网学习vue3。计算属性的应用场景https://blog.csdn.net/qq_17335549/article/details/126669092同样是可以监控到响应式依赖的变化,watch侦听器的好处是

    1. 可以得到oldvalue 和newvalue
    2. 可以在watch函数中执行异步操作(如接口请求等)

    题外话?为什么computed计算属性中不能写也不操作?

    其实不是不能写,你可以写,想写就写,也不会报错,但是没有意义,因为计算出来的属性一般我们是要渲染到模版上的,但是如果是异步请求的话,接口还没返回,计算出来的值就是undefined,也不能用async await 没意义。

    2. watchEffect

    这个在vue2中是没有的,它的特点是立即执行,而watch是懒执行的,watch只有当依赖的数据发生变化的是后才执行,watchEffect在每次重新加载页面都会执行。我在我的这篇文章有提到过【vue3】04. 跟着官网学习vue3-响应式基础_我有一棵树的博客-CSDN博客跟着官网学习vue3 响应式原理https://blog.csdn.net/qq_17335549/article/details/126638066

    二、用watch实现模态框组件

    模态框是啥,就是一个弹出框,一个对话框,同样写两种类型,一种是自己实现,一种是二次封装组件库and-design-vue的modal组件

    1.自己手写模态框

    明确需求:一个模态框,必要的元素有

    1. 全屏的蒙版
    2. 模态框内容
    3. 关闭的按钮

    其他的都可以忽略(温馨提示能不自己实现就不要自己实现,自己造的轮子有很多问题,用现成的组件库就好)

    1. <template>
    2. <div class="mask" v-show="visible">
    3. <div class="modal-content">
    4. <div class="close-btn" @click="$emit('update:visible', false)">xdiv>
    5. 内容
    6. div>
    7. div>
    8. template>
    9. <script lang="ts" setup>
    10. import { defineEmits, defineProps } from 'vue';
    11. const props = defineProps({
    12. visible: Boolean,
    13. });
    14. const emits = defineEmits(['update:visible']);
    15. script>
    16. <style lang="scss">
    17. .mask {
    18. width: 100vw;
    19. height: 100vh;
    20. background-color: rgba(0, 0, 0, 0.2);
    21. position: fixed;
    22. left: 0;
    23. top: 0;
    24. .modal-content {
    25. margin: 100px auto;
    26. height: 300px;
    27. width: 300px;
    28. display: flex;
    29. align-items: center;
    30. justify-content: center;
    31. background: #fff;
    32. position: relative;
    33. .close-btn {
    34. position: absolute;
    35. top: 10px;
    36. right: 10px;
    37. border: 1px solid;
    38. width: 20px;
    39. height: 20px;
    40. display: flex;
    41. align-items: center;
    42. justify-content: center;
    43. cursor: pointer;
    44. }
    45. }
    46. }
    47. style>
    1. <template>
    2. <o-modal v-model:visible="showModal">o-modal>
    3. <div @click="showModal = true">点击打开对话框div>
    4. template>
    5. <script lang="ts" setup>
    6. import { ref } from 'vue';
    7. import OModal from './component/OModal.vue';
    8. const showModal = ref(false);
    9. script>
    10. <style>
    11. #app {
    12. }
    13. style>

    2.封装组件

    一个道理,可以二次封装。

    但是,如果把组件再次封装成MyOModal,有的时候有eslint会报错 ,就是不可以修改props的值

    (1)这个时候在MyOModal组建中使用computed属性计算即可

    (2)或者可以使用watch

     总之,条条大路通罗马,之前我一直用watch,现在觉得computed会更加方便和简洁明了。


    总结

    希望这几个简单的例子,对你有帮助,如果没有帮助,抱歉打扰你宝贵时间啦。

  • 相关阅读:
    使用c#将aj-report桌面化1
    STM32-看门狗
    手机apn介绍
    VUE响应式
    JVM篇---第六篇
    LVGL---基础对象的样式(styles)
    1.java环境搭建与eclipse安装和配置
    激活函数曲线图
    DOX-HSA/HGB/FITC/Glu人血清蛋白/血红蛋白/荧光素/葡萄糖修饰阿霉素
    微信小程序 地图map组件 SDK 并 实现导航
  • 原文地址:https://blog.csdn.net/qq_17335549/article/details/126721463
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号