0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用Vue3时遇到的一些问题

OSC开源社区 来源:OSCHINA 社区 2023-09-13 10:16 次阅读

来源| OSCHINA 社区

作者 |葡萄城技术团队

Vue3 目前已经趋于稳定,不少代码库都已经开始使用它,很多项目未来也必然要迁移至 Vue3。本文记录我在使用 Vue3 时遇到的一些问题,希望能为其他开发者提供帮助。

1.使用 reactive 封装基础数据类型

传统开发模式中,数据声明很简单。但是在 Vue 中有多个响应式变量声明方式,整体的使用规则如下:

使用 reactive 来封装 Object,Array,Map,Set 数据类型;

使用 ref 封装 String,Number,Boolean 类型。

如果使用 reactive 来封装基础数据类型,会产生警告,同时封装的值不会成为响应式对象。



但是,可以使用 ref 来封装 Object、Array 等数据类型,内部会调用 reactive。

2.解构 reactive 对象

下面代码中,count 封装成了 reactive 对象,点击按钮时,count 会自增。



 

如果需要使用 ES6 结构赋值对 state 进行结构,需要使用如下的代码:




结构复制完成之后,点击按钮,效果如下: 代码看起来比较相似,而且根据以前的表现,逻辑是可以正常执行的。但事实上,Vue 的响应式追踪通过属性获取,这意味着我们不能去解构响应式对象,会导致引用连接丢失。这是响应式代理的限制之一。

3.使用.value 造成的困惑

Ref 接受一个值并返回一个响应式对象,该值只有在内部对象.value 属性下可用。
const count = ref(0)

 console.log(count) // { value: 0 }
 console.log(count.value) // 0

 count.value++
 console.log(count.value) // 1

但是 ref 如果应用在 template 中,不需要对 ref 进行解包,也就是不需要使用.vue。




需要注意的是,解包只作用于一级属性,下边的代码会返回 [object Object]



正确使用.value 需要时间,初学者偶尔会忘记它。在使用时,要注意只在合适的场景下使用它。

4.Emitted 事件

从 Vue 发布以来,子组件可以通过 emits 与父组件通信,只需要添加一个自定义的监听器来监听事件即可。
this.$emit('my-event')

Vue3 中,需要使用编译器宏 defineEmits 来声明 emits。
const emit = defineEmits(['my-event'])
 emit('my-event')
 

在 setup 语法糖下,defineEmits 和 defineProps 会被自动引入。其它情况下,需要主动引入。


最后,由于 Vue3 中,事件必须声明,因此再需要使用.native 修饰符,该修饰符已被移除。

5. 声明组件选项

setup 不支持如下组件选项声明:

name

inheritAttrs

customOptions

如果需要继续使用这些属性,可以声明多个 script 脚本,如下所示:





6. 使用 Reactivity Transform

Reactivity Transform 是 Vue3 中一个预览属性,有一定的争议性,默认是禁用的。它主要用来简化组件的声明方式。这个想法是利用编译时转换来自动解包 ref,从而避免使用.value。从 Vue3.3 中已经删除该功能,作为一个扩展包提供。由于它不是 Vue 的核心部分,且目前风险还是比较多,建议先不要在此方面投入太多事件。

7.定义异步组件

异步组件以前是通过将它们包含在方法中来声明的。
const asyncModal = () => import('./Modal.vue')

Vue3 中需要使用 defineAsyncComponent 来声明异步组件。

import { defineAsyncComponent } from 'vue'
 const asyncModal = defineAsyncComponent(() 
=> import('./Modal.vue'))

8.template 中使用不必要的包装元素

 

Vue3 中支持多个根元素,不再需要使用外层 div 元素包裹。



9.生命周期函数

所有组件生命周期函数都通过添加 on 前缀或完全更名实现,下图详细列出了具体的变化:7e6d476c-5160-11ee-a25d-92fbcf53809c.png

10.产品文档

官方对文档已经做了更新,补充更新了 API,并包含很多有价值的注释、指南和最佳实践。即使你现在使用的是 Vue2,通过阅读新的文档也会学到一些新知识。 总结 每个框架都有学习曲线,Vue3 相对 Vue2 更加陡峭,在框架切换之间也会有一定的学习成本。但 Vue3 组合式 API 相对 Vue2 选项式 API 确实更加简洁易用。如果您在使用过程中有什么疑问,也欢迎留言交流。

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 封装
    +关注

    关注

    127

    文章

    7990

    浏览量

    143371
  • 数据类型
    +关注

    关注

    0

    文章

    236

    浏览量

    13656
  • string
    +关注

    关注

    0

    文章

    40

    浏览量

    4741

原文标题:Vue3中的几个坑,你都见过吗?

文章出处:【微信号:OSC开源社区,微信公众号:OSC开源社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    ESP8266模块和机智云学习中遇到一些问题

    正点原子STM32开发板+ESP8266使用机智云最近学习STM32,学长和大佬建议我去学习下ESP8266模块和机智云,于是开始摸索。在这里记录以下学习中遇到一些问题,希望帮助得到大家。
    发表于 08-24 06:28

    学习32输入捕获时遇到一些问题

    在学习32输入捕获时遇到一些问题以及得出的答案最近学习输入捕获时参考了原子哥的程序,前面的引脚设置,定时器设置,中断设置啥的都看的懂,(不懂的可以去网上搜下,讲解的有很多)但是在中断设置里有些
    发表于 01-06 06:16

    固态继电器及在应用中一些问题的探讨

    固态继电器及在应用中一些问题的探讨   摘  要:阐述了固态继电器的原理、结构、特点及交流直
    发表于 07-27 10:45 637次阅读

    cadence画板中遇到一些问题

    cadence画板中遇到一些问题,在这里分享给大家,多多指教
    发表于 02-25 16:01 0次下载

    关于红外通信的一些问题知识点

    关于红外通信的一些问题知识点。
    发表于 05-05 17:40 4次下载

    绘制原理图和PCB图的过程中常遇到一些问题

    绘制原理图和PCB图的过程中常遇到一些问题.doc
    发表于 07-12 10:42 0次下载

    LED照明一些问题的解决方案英文资料

    本文的主要内容是LED照明一些问题的解决方案英文资料
    发表于 04-16 09:59 15次下载
    LED照明<b class='flag-5'>一些问题</b>的解决方案英文资料

    一些关于手机信号放大器在安装时会遇到一些问题

    随着时代的发展,手机信号放大器也普布出现在的家庭中。最近收集了一些关于手机信号放大器在安装时会遇到一些问题,整理了四大类常见问题与处理方式,具体内容可以看详细~ 对通讯基站造成干扰的处理 1.
    发表于 09-01 14:24 2636次阅读

    光端机使用过程中碰到的一些问题

    光端机,就是光信号传输的终端设备,我们在使用的过程中难免会碰到一些问题,接下来杭州飞畅的小编为大家详细列举了光端机在使用过程中遇到一些常见问题以及对应的解决方案,感兴趣的朋友就起来
    的头像 发表于 12-25 14:54 1126次阅读

    关于vue如何去水印的解决方法的介绍

    很多人都懂一些简单的电脑系统问题的解决方案,但是vue怎么去水印的解决思路却鲜为人知,小编前几天就遇到vue怎么去水印的问题,于是准备整理一些
    发表于 03-24 17:33 3447次阅读

    STM32中遇到的问题--关于串口的一些常见问题

    在单片机的开发过程中,最常用的外设就是串口了,是用来进行bug纠错、log输出的常用工具,也是用来与外部通讯的常见协议之。 但是在使用串口的过程中难免会遇到一些问题,下面就我在工作遇到
    发表于 12-24 18:51 2次下载
    STM32中<b class='flag-5'>遇到</b>的问题--关于串口的<b class='flag-5'>一些</b>常见问题

    关于React和Vue产生定的认知

    Vue2 相较 Vue3 版本而言牢牢占据着大部分 Vue 开发者的视野,但是因为 Vue 官方已经把 Vue3 作为默认的版本,所以在此同
    的头像 发表于 11-02 13:18 871次阅读

    【跃昉科技BF2开发板试用体验】遇到过的一些问题

    本文来源电子发烧友社区,作者:不羁小生, 帖子地址: https://bbs.elecfans.com/jishu_2289347_1_1.html 分享一些遇到一些遇到
    的头像 发表于 11-10 11:04 699次阅读
    【跃昉科技BF2开发板试用体验】<b class='flag-5'>遇到</b>过的<b class='flag-5'>一些问题</b>

    文看懂Vue3响应式系统原理

    Vue3 中,响应式系统的实现基于 ES6 的 Proxy 对象。Proxy 可以直接监听对象和数组的变化,而无需对每个属性进行监听,从而大大提高性能。同时,Proxy 也可以解决 Object.defineProperty 无法监听数组的问题。
    的头像 发表于 12-07 10:55 1816次阅读
    <b class='flag-5'>一</b>文看懂<b class='flag-5'>Vue3</b>响应式系统原理

    Vue3设计思想及响应式源码剖析

    作者:京东物流 乔盼盼 Vue3结构分析 1、Vue2与Vue3的对比 •对TypeScript支持不友好(所有属性都放在了this对象上,难以推倒组件的数据类型) •大量的API
    的头像 发表于 12-20 10:24 172次阅读