带你体验Vue2和Vue3开发组件的区别(二)

举报
青年码农 发表于 2022/08/24 23:41:54 2022/08/24
【摘要】 上一篇已经对Vue2和Vue3的组件开发区别讲了一部分,如需了解请移步: 带你体验Vue2和Vue3开发组件的区别(一), 主要讲了template、data、methods、Lifecyle Hooks这几个的区别,接下来我们再讲讲另外几个属性的变化。 1.Computed Properties Computed Pro...

上一篇已经对Vue2和Vue3的组件开发区别讲了一部分,如需了解请移步:

带你体验Vue2和Vue3开发组件的区别(一)

主要讲了template、data、methods、Lifecyle Hooks这几个的区别,接下来我们再讲讲另外几个属性的变化。

1.Computed Properties

Computed Properties-计算属性,这里就不多讲,只做个对比,如果需要了解详细的计算属性可以参照Vue中的computed和watch的区别,里面解释了计算属性的详细用法及和watch的区别。

Vue2


   
  1. export default {
  2.   // .. 
  3.   computed: {
  4.     formatData() {
  5.       // 方法
  6.     }
  7.   }
  8. }

Vue3

Vue3 使用计算属性,需要先在组件内引入computed。


   
  1. import { reactive, computed } from 'vue'
  2. export default {
  3.   setup () {
  4.     const data = reactive({
  5.       userName: '',
  6.       lowerCaseUsername: computed(() => data.userName)
  7.     })
  8.     // ..
  9.   }
  10. }

2.Emitting Events

自定义事件大多数用在组件间通讯上。

Vue2

在Vue2中我们直接用this.$emit触发,,前面是方法名称,后面是参数。

this.$emit('login', {})
  

Vue3

Vue3中,this的指向已经变了,所以在setup中不能使用this,


   
  1. setup (props, { emit }) {
  2.     // ...
  3.     const login = () => {
  4.       emit('login', {})
  5.     }
  6.     // ...
  7. }

setup()方法可以接收两个参数:

  1. props - 不可变的组件参数

  2. context - Vue3 暴露出来的属性(emit,slots,attrs)

3.Props

接收父组件props参数传递这一块区别也蛮大,主要是this不能使用了。

Vue2

this代表的是当前组件,所以可以直接获取属性值


   
  1. <template>
  2.   <div class="about">
  3.     <button @click="clickBtn">点击</button>
  4.   </div>
  5. </template>
  6. <script>
  7. export default {
  8.   props: {
  9.     title: String
  10.   },
  11.   data() {
  12.     return {
  13.     };
  14.   },
  15.   methods: {
  16.     clickBtn() {
  17.       console.log(this.title);
  18.     }
  19.   }
  20. };
  21. </script>

Vue3

this无法直接拿到props属性,但是setup提供了参数,我们可以获取。


   
  1. <template>
  2.   <button @click="clickBtn">点击</button>
  3. </template>
  4. <script>
  5. import { reactive } from "vue";
  6. export default {
  7.   props: {
  8.     title: String
  9.   },
  10.   setup(props) {
  11.     const data = reactive({});
  12.     const clickBtn = () => {
  13.       console.log(props.title);
  14.     };
  15.     return {
  16.       clickBtn,
  17.       data
  18.     };
  19.   }
  20. };
  21. </script>

4.watch

看到上面的,应该能想到使用区别了。

Vue2

如想要了解Vue2 watch的详细信息请:

Vue中的computed和watch的区别


   
  1. <template>
  2.   <div>
  3.     <input type="text" v-model="a" />
  4.     <div>a={{ a }}</div>
  5.     <div>c={{ c }}</div>
  6.   </div>
  7. </template>
  8. <script>
  9. export default {
  10.   data() {
  11.     return {
  12.       a: "",
  13.       c: ""
  14.     };
  15.   },
  16.   watch: {
  17.     a(val) {
  18.       console.log(val);
  19.       this.c = val + "数据";
  20.     }
  21.   }
  22. };
  23. </script>

Vue3

首先从vue中引入,接下来


   
  1. <template>
  2.   <input type="text" v-model="data.username" placeholder="Username" />
  3. </template>
  4. <script>
  5. import { reactive, watch } from "vue";
  6. export default {
  7.   setup() {
  8.     const data = reactive({
  9.       username: ""
  10.     });
  11.     // 监听
  12.     watch(
  13.       () => data.username,
  14.       (oldVlaue, newValue) => {
  15.         console.log(oldVlaue, newValue, "改变");
  16.       }
  17.     );
  18.     return {
  19.       data
  20.     };
  21.   }
  22. };
  23. </script>

第一个参数是一个响应式对象
第二个是对象发生变化时执行的函数体
回调函数包含两个参数,分别为 newValue ,oldValue
可以监听多个对象,第一项改为数组即可
如果监听reactive对象时,需要使用函数返回值的方法

文章来源: blog.csdn.net,作者:NMGWAP,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/NMGWAP/article/details/125067100

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。