Vue 3中那些激动人心的新功能,web前端开发软件

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 中讨论,意味着将来它可能还会继续变动。

RFC:https://github.com/vuejs/rfcs/pull/29

片 段

Vue 3 中值得期待的另一个激动人心的新功能是片段(Fragments)。

你可能会问什么是片段?嗯,如果你创建一个 Vue 组件,则它只能有一个根节点。这意味着无法创建这样的组件:

Hello
World

原因是代表任何 Vue 组件的 Vue 实例都需要绑定到单个 DOM 元素中。想要创建具有多个 DOM 节点的组件,唯一的方法是创建一个没有基础 Vue 实例的功能组件。

事实证明,React 社区也有同样的问题。他们提出的解决方案是一个名为片段(Fragment)的虚拟元素。它看起来差不多是这个样子:

class Columns extends React.Component {

render() {

return (

<React.Fragment>

Hello World

</React.Fragment>

);

}

}

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

目前,你可以在 Vue 2 中使用 vue-fragments 库来应用片段,而在 Vue 3 中它是开箱即用的!

Suspense

React 生态系统中还有一个好主意也将在 Vue 3 中采用,就是 Suspense 组件。

Suspense 会暂停你的组件渲染,并渲染回退组件,直到满足一个条件为止。在 Vue London Evan 期间,Vue 团队简单介绍了这个主题,并向我们展示了值得期待的 API。到头来 Suspense 只是一个具有插槽的组件:

<template #fallback>

Loading…

Suspended-component完全渲染之前将显示回退组件。Suspense 可以等待组件下载完毕(如果该组件是异步的),或者在setup函数中执行一些异步操作。

多个 v-model

V-model 是一种指令,可用于在给定组件上实现双向绑定。我们可以传递响应性属性,并从组件内部对其进行修改。

从表单元素可以很好地了解v-model

<input v-bind="property />

但是你知道可以对所有组件使用v-model吗?在后台,v-model只是传递value属性和侦听input事件的捷径。将上面的示例重写为以下语法会有完全相同的效果:

<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

<InviteeForm

v-model:name=“inviteeName”

v-model:email=“inviteeEmail”

/>

这一 API 更改现在正在这个 RFC 中讨论,这意味着将来可能会有新的变化。

RFC:https://github.com/vuejs/rfcs/pull/31

Portals

Portals 是特殊的组件,用来在当前组件之外渲染某些内容。这也是 React 原生实现的功能之一。React 文档关于 portals 是这样介绍的:

“Portals 提供了一种一流的方式来将子级渲染到父组件的 DOM 层级之外的 DOM 节点中。”

这是一种处理模态、弹出窗口以及页面顶部组件的非常好用的方法。通过 portals,你可以确保没有任何主机组件 CSS 规则会影响你要显示的组件,也无需使用z-index搞些小动作了。

对于每个 portal,我们需要指定其目标位置,在其中渲染 portal 内容。下面是 portal-vue 库的实现,它为 Vue 2 添加了这一功能:

portal-vue 库:https://github.com/LinusBorg/portal-vue

This slot content will be rendered wherever thportal-target with name 'destination'

is located.

Vue 3 将提供对 portals 的开箱即用支持!

新的自定义指令 API

自定义指令 API 在 Vue 3 中将略有变化,以更好地与组件生命周期保持一致。这项更改会让 API 更加直观,从而帮助新手更容易地理解和学习 API。

这是当前的自定义指令 API:

const MyDirective = {

bind(el, binding, vnode, prevVnode) {},

inserted() {},

update() {},

componentUpdated() {},

unbind() {}

}

下面是 Vue 3 中的样子:

const MyDirective = {

beforeMount(el, binding, vnode, prevVnode) {},

mounted() {},

beforeUpdate() {},

updated() {},

beforeUnmount() {}, // new

unmounted() {}

}

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:前端)
img

因此收集整理了一份《2024年Web前端开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-9BWoRj5v-1710895385096)]
[外链图片转存中…(img-3ugNO1Lt-1710895385097)]
[外链图片转存中…(img-3451uElJ-1710895385098)]
[外链图片转存中…(img-7inLb8Fa-1710895385098)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:前端)
[外链图片转存中…(img-TjBcUE7B-1710895385099)]

  • 11
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值