上一篇:Vue 3中令人激动的新功能:Composition API

本文接着上文继续翻译未完的内容。

全局安装/配置API更改

我们可以发现我们在实例化和配置应用程序的方式上又有了一个重大的变化。我们现在就来看看它的工作原理:

import Vue from 'vue'
import App from './App.vue'Vue.config.ignoredElements = [/^app-/]
Vue.use(/* ... */)
Vue.mixin(/* ... */)
Vue.component(/* ... */)
Vue.directive(/* ... */)new Vue({render: h => h(App)
}).$mount('#app')

目前我们使用全局Vue对象来提供任何配置和创建新的Vue实例。对Vue对象进行的任何更改都会影响到每个Vue实例和组件。

现在让我们来看看它在Vue 3中是如何工作的:

import { createApp } from 'vue'import App from './App.vue'
const app = createApp(App)
app.config.ignoredElements = [/^app-/]app.use(/* ... */)app.mixin(/* ... */)app.component(/* ... */)app.directive(/* ... */)
app.mount('#app')

正如你可能注意到的那样,现在每个配置都是用 createApp 定义的某个Vue应用程序的范围。

这可以让你的代码更容易理解,也更不容易出现由第三方插件引起的意外问题。目前,如果一些第三方的解决方案在修改Vue对象,可能会以意想不到的方式影响你的应用程序(尤其是全局mixins),这在Vue 3中是不可能的。

这个API的改变目前正在本RFC中讨论,这意味着它可能会在未来发生改变。

Fragment

在Vue 3中,我们可以期待的另一个令人兴奋的补充是Fragment。

你可能会问,什么是碎片?如果你创建一个Vue组件,那么它只能有一个根节点。

这意味着不能创建这样的组件:

<template>  <div>Hello</div>  <div>World</div></template>

原因是代表任何Vue组件的Vue实例需要绑定到一个单一的DOM元素中。唯一可以创建一个具有多个DOM节点的组件的方法就是创建一个没有底层Vue实例的功能组件。

结果发现React社区也遇到了同样的问题。他们想出的解决方案是一个名为 Fragment 的虚拟元素。它看起来差不多是这样的:

class Columns extends React.Component {  render() {    return (      <React.Fragment>        <td>Hello</td>        <td>World</td>      </React.Fragment>    );  }}

尽管Fragment看起来像一个普通的DOM元素,但它是虚拟的,根本不会在DOM树中呈现。这样我们可以将组件功能绑定到一个单一的元素中,而不需要创建一个多余的DOM节点。

目前你可以在Vue 2中使用vue-fragments库来使用Fragments,而在Vue 3中,你将会在开箱即用!

Suspense

来自React生态系统的另一个伟大的想法将在Vue 3中采用,那就是Suspense组件。

Suspense会暂停你的组件渲染,并重现一个回落组件,直到满足一个条件。在Vue London期间,Evan You简单地触及了这个话题,并展示了我们或多或少可以期待的API。事实证明,Suspense将只是一个具有插槽的组件:

<Suspense><template ><Suspended-component /></template><template #fallback>Loading...</template>
</Suspense>

在Suspended-component完全渲染之前,备用内容会被显示出来。如果是异步组件,Suspense可以等待组件被下载,或者在设置函数中执行一些异步操作。

多个 v-models

V-model是一个指令,我们可以用它来实现对给定组件的双向绑定。我们可以在组件内部传递一个相应的属性,并在组件内部修改。

从表单元素中我们可以很好的了解v-model:

<input v-model="property />

但是你知道你可以在每个组件中使用 v-model 吗?在引擎盖下,v-model 只是传递值属性和监听输入事件的快捷方式。把上面的例子重写成下面的语法,就会有完全相同的效果:

<input v-bind:value="property"v-on:input="property = $event.target.value"
/>

我们甚至可以用组件 model 属性改变默认属性和事件名称:

model: {prop: 'checked',event: 'change'
}

正如你所看到的那样,如果我们想在组件中进行双向绑定,v-model指令是一个非常有用的语法求和者。不幸的是,每个组件只能有一个v-model。

幸运的是,这在Vue 3中不会成为问题。你可以给v-model的属性起名字,并且你可以拥有任意数量的v-model。下面你可以找到一个表单组件中的两个v-model的例子:

<InviteeFormv-model:name="inviteeName"v-model:email="inviteeEmail"
/>

这个 API 的改变目前正在本 RFC 中讨论,这意味着它在未来可能会发生变化。

未完待续。

推荐阅读:

扶我起来,我还能学:迎接 Vue 3.0

CSS 中calc()的完整指南(一)

Vue 3中令人激动的新功能:Composition API

掘金小册全网8折优惠入口

公众号后台回复【前端】加入群

好文和朋友一起看~

Vue 3中令人激动的新功能:Fragment+Suspense+多v-model相关推荐

  1. Ubuntu 12.10中的8个新功能,Quantal Quetzal

    Ubuntu 12.10 has been released and you can download it now. From better integration with web apps an ...

  2. vue项目中图标可拖拽功能实现

    vue项目中页面实现图标拖拽功能 最近在做项目需求时有个小功能:在页面的首页增加一个快速功能按钮,用来满足操作者快速实现某一目的渴望.为了体现代码搬运工的气质与水准,当时心想,这么简单的一个小东西必须 ...

  3. 连发Cell,Nature顶级期刊,揭示脊髓和脑干在触摸中令人惊讶的新作用

    来源:生物通 触觉对我们做的几乎所有事情都至关重要,从家里的日常工作到在可能隐藏危险的陌生地形上导航. 触觉对我们做的几乎所有事情都至关重要,从家里的日常工作到在可能隐藏危险的陌生地形上导航.长期以来 ...

  4. Photoshop 2023 v24.2 for Mac 中英文版有哪些新功能呢 支持M1 M2机型 增加了哪些新相机配 解决另存为黑屏的问题

    Adobe Photoshop 2023是适用于Mac操作系统的图像处理软件,它是业界领先的图像编辑和设计工具之一.它提供了一系列强大的工具和功能,可帮助用户对照片.图像.插图等进行编辑和处理. 使用 ...

  5. vue项目中自己写popup弹窗功能-心得-案例

    效果图 上图展示有两种方式(以下代码演示只粘贴主要样式和逻辑代码) 方式一:是通过组件卸载的方式 方式二:是通过弹窗内部控制显示和隐藏 主要公共样式代码 // 弹窗 .popup-mask {posi ...

  6. 【译】Flutter 2.2中的新功能

    原文:What's new in Flutter 2.2 作者:Chris Sells 发布时间:2021.05.20 Flutter 2.2版本的重点是打磨和优化,包括iOS的性能改进.Androi ...

  7. Windows Mobile 5.0 中为开发人员提供的新功能(3)

    Windows Mobile 5.0 中为开发人员提供的新功能(3) Pocket Outlook 增强功能 Pocket Outlook 向用户和应用程序开发人员提供了易于使用的 PIM.将 Poc ...

  8. ES2020 中 Javascript 10 个你应该知道的新功能

    好消息 - ES2020 新功能已经落地!这就意味着,现在对 ES2020 中 Javascript 的新增和改进要有一个完整的了解.让我们来看看都有哪些改变. 1.BigInt BigInt,Jav ...

  9. Java平台,标准版Oracle JDK 9中的新功能

    Java平台,标准版 Oracle JDK 9中的新增功能 版本9 E77563-05 2017年9月 JDK 9中的新功能概述 Java Platform,Standard Edition 9是一个 ...

最新文章

  1. VR视觉健康标准在穗发布 专家:VR使用不要超过45分钟
  2. 构建根文件系统之busybox(一)浅析
  3. VTK:PolyData之PointSource
  4. idea单行注释对齐修改Settings - Editor - Code Style-Code Generation,取消comment code的勾选
  5. java 移动页面中的图片上传_HTML5移动端图片上传(一)
  6. java spring mvc 上传_Java Spring MVC 上传下载文件配置及controller方法详解
  7. shell脚本中向hive动态分区插入数据
  8. fir.im 持续集成技术实践
  9. Android之在一个类里面注册Handler发送消息在另外一个类里面接收消息
  10. SMTP Error: Could not connect to SMTP host.
  11. linux系统如何使用qq,Linux系统中怎么使用QQ
  12. word模板Normal.dotm文件的生成与替换
  13. opnet如何进行C语言编程,OPNET学习小记(五)
  14. Qt 之 QPainter
  15. android小米手机变慢,小米安卓系统手机上网速度慢的解决方法
  16. skyWalking相关
  17. 2019西安交通大学计算机夏令营
  18. js执行oracle函数吗,执行javascript函数
  19. Vue微信网页开发,输入法顶开一部分屏幕的解决办法
  20. oracle 查询调用某一存储过程的job,oracle job 调用存储过程的使用

热门文章

  1. 一天一篇latex刘海洋代码解析:1.2.2 从提纲开始
  2. 关于乱码(MessyCode)问题
  3. Finereport 9.0升级到10.0工具下载[9-10升级工具]
  4. mysql建表语句enum_mysql创建表语句格式
  5. android手机互联是什么软件,车机互联app哪个好_车联网和手机互联哪个好_车机互联软件排行...
  6. parquet和orc 一次说清了
  7. 名创优品营收增速再下降:年收入和豪言还差900亿,高瓴抄底失败
  8. 【服务器raid数据恢复】RAID5两块盘离线的数据恢复案例
  9. 生信小白学习日记Day4Day5——NGS基础 NGS分析注释(BWA软件)
  10. darksky 经纬度_使用DarkSky API构建天气应用