1 computed函数

image.png

1.1例子:vue2的写法

  1. <template >
  2. <div class="container">
  3. <div>标题</div>
  4. <div>{{ msg }}</div>
  5. <button @click="ClickBtn">点击显示父组件信息</button>
  6. <br />
  7. 第一个数:<input type="text" v-model="data.firstNum" />
  8. <br />
  9. 第二个数:<input type="text" v-model="data.scordNum" />
  10. <div>加起来:{{addNum}}</div>
  11. </div>
  12. </template>
  13. <script >
  14. import { reactive } from "@vue/reactivity";
  15. name: "tabbar";
  16. export default {
  17. props: {
  18. msg: String,
  19. },
  20. emits: ["handleBtn"], //组件放出去的事件也需要给在组件内部声明一下
  21. computed: { //计算属性
  22. addNum(){
  23. return Number(this.data.firstNum)+Number(this.data.scordNum)
  24. // 确保相加的是两个数字 而不是单纯的数值相加
  25. }
  26. },
  27. setup(props, context) {
  28. const data = reactive({
  29. firstNum: 10,
  30. scordNum: 2,
  31. });
  32. console.log(props); //传进来的值在此处可以被打印
  33. console.log(context);
  34. //点击组件内按钮 提交信息给父组件
  35. function ClickBtn() {
  36. //事件名 参数
  37. console.log("点击自组件");
  38. context.emit("handleBtn", "蚌埠住了");
  39. }
  40. return {
  41. ClickBtn,
  42. data,
  43. };
  44. },
  45. };
  46. </script>
  47. <style lang="less" scoped>
  48. .container {
  49. margin: 10px;
  50. background: cornsilk;
  51. width: 100%;
  52. display: flex;
  53. justify-content: center;
  54. align-items: center;
  55. flex-direction: column;
  56. }
  57. </style>

1.2 vue3中的计算属性的写法

先引入computed的属性
image.png
然后在setup中使用
image.png
return的值就是fullName的值
image.png
都在setup中不需要用this(也用不了)

之后记得在setup的函数return中return出来才可以在模板中使用
image.png
或者
image.png

以上情况只考虑了不修改计算属性的值的情况 只考虑了读的情况

image.png
在set中通过”-“进行拆分成数组(仅针对于以上案例中的拆分)

2 watch监听属性(功能与vue2 中的一致)

2.1 vue2 的写法

1 简易写法

image.png

2 handler写法

image.png
可以写其他的配置项

2.2 vue3中的写法

直接在setup中写watch,在setup中监听已经变成了内置的函数,
不用const 因为watch是一种行为,不是数据

情况一 :监视ref所定义的 一个 数据

image.png

情况二 :监视ref所定义的 多个 数据

vue3中可以调用多次watch函数
监视多个数据
image.png
监视多个数据的简便写法
把数据放进数组里
image.png
那么监听返回的数据也是数组
image.png

添加配置项

1 一般监听是数据发生变化之后再执行,那么我想要上来直接执行一遍watch怎么操作(之前是配置immediate为true)

image.png

实际上watch可以传递三个参数
第一个是监听的对象 第二个是执行操作的回调函数 第三个是个对象用来放置配置项

情况三 监听reactive定义的一个整个响应式数据(有坑!!!)

(有坑注意:此处无法正确的获得oldValue)
image.png
在vue3 中的reactive中 不论层级有多深 不用deep也可以监听到数据的变化
image.png
image.png
没办法关闭deep配置

情况四 监听reactive定义的一个整个响应式数据中的某一个属性值

把监视的参数改成函数的返回值(让箭头函数指向这个值,或者直接return这个值)
这里的oldValue是可以正常工作的
image.png

情况五 监听reactive中定义的响应式数据中的某些属性值

返回值放进数组中
image.png

特殊情况
image.png
课程链接:https://www.bilibili.com/video/BV1Zy4y1K7SH?p=152&spm_id_from=pageDriver
(对象类型的比较容易出问题)

总结:
image.png