vue 2.6 更新变动
[原文链接]
Slots:新语法,性能改进为3.0做准备
改用 v-slot 指令
// 默认插槽
// 插槽的缩写语法不能和具名插槽混用,因为它会导致作用域不明确 <baz v-slot ="baz">
{{baz}}
</ baz > // 嵌套默认插槽
// 组件提供的范围变量也在该组件本身上声明
// 当被提供的内容只有默认插槽时,组件的标签才可以被当作插槽的模板来使用。
// 内部工作原理是将你的插槽内容包括在一个传入单个参数的函数里。 <foo v-slot="foo">
<bar v-slot="bar">
<baz v-slot="baz">
{{ foo }} {{ bar }} {{ baz }}
</baz>
</bar>
</foo> // 具名域槽
<my-name>
<template v-slot:one="{ msg }">
{{ msg }}
</template>
</my-name> // 混用插槽
// v-slot 只能添加在一个 <template> 上 <foo>
<template v-slot:one="one">
<bar v-slot="bar">
<div>{{ one }} {{ bar }}</div>
</bar>
</template> <template v-slot:two="two">
<bar v-slot="bar">
<div>{{ two }} {{ bar }}</div>
</bar>
</template>
</foo> // 动态插槽名
// 动态指令参数也可以用在 v-slot
<base-layout>
<template v-slot:[dynamicSlotName]>
...
</template>
</base-layout> // 具名插槽的缩写
// v-slot:header 可以被重写为 #header
// 该缩写只在其有参数的时候才可用
异步错误处理
Vue的内置错误处理机制(errorCaptured钩子和全局errorHandler钩子),现在也捕获v-on处理程序内部的错误。
建议使用async / await 异步函数隐式返回Promises
export default {
async mounted() {
//如果在这里抛出异步错误,由errorCaptured和Vue.config.errorHandler捕获
this.posts = await api.getPosts()
}
}
动态指令参数
指令参数现在可以接受动态JavaScript表达式
动态参数值应该是字符串,但允许null作为一个明确指示应该删除绑定的特殊值,那将会很方便。任何其他非字符串值都可能出错,并会触发警告。(仅适用于v-bind和v-on)
<div v-bind:[attr]="value"></div>
//简写
<div :[attr]="value"></div> <button v-on:[event]="handler"></button>
//简写
<button @[event]="handler"></button> <my-component>
<template v-slot:[slotName]>
Dynamic slot name
</template>
</my-component>
//简写
<foo>
<template #[name]>
Default slot
</template>
</foo> <div :[key + 'foo']="value"></div> //可能不会执行
//使用
<div :[`${key}foo`]="value"></div>
编译警告位置信息
大多数模板编译警告现在都带有源范围信息。
显式创建独立活动对象
引入了一个新的全局 API,可以用来显式地创建响应式对象:
const reactiveState = Vue.observable({
count: 0
})
//生成的对象可以直接用在计算属性 (computed property) 和渲染函数(render) 中,并会在被改动时触发相应的更新。
服务器端渲染期间的数据预取(SSR)
serverPrefetch钩子允许(而不是仅仅路线级组件)的任何部件的服务器端渲染期间预取数据,从而允许更灵活的使用和减少数据提取与路由器之间的耦合。
像Nuxt这样的项目vue-apollo已经计划使用这个新功能简化他们的实现。
重要的内部变化
nextTick
在2.5.0中,我们进行了内部调整,nextTick如果在v-on事件处理程序中触发更新,则会导致使用Macrotasks而不是Microtasks对更新进行排队。
这最初的目的是修复一些浏览器边缘情况,但反过来又导致了许多其他问题。
在2.6中,我们找到了原始问题的一个更简单的解决方案,它允许我们nextTick在所有情况下恢复一致地使用Microtasks。
this.$scopedSlots现在的函数总是返回Arrays
(此改动只影响使用 render 函数的用户)在 render 函数中,传入的 scoped slot 以函数的形式被暴露在this.$scopedSlots上面。
在之前的版本中,这些函数会基于父组件传入的内容不同而返回单个 VNode 或是一个 VNode 的数组。
这是当初实现时的一个疏漏,导致了 scoped slot 函数的返回值类型是不确定的。
2.6 当中,所有的 scoped slot 函数都只会返回 VNode 数组或是 undefined。
如果你的现有代码中使用了 this.$scopedSlots 并且没有处理可能返回数组的情况,那么可能会需要进行相应的修正。
vue 2.6 更新变动的更多相关文章
- vue数组检测更新问题
由于 JavaScript 的限制, Vue 不能检测以下变动的数组: 当你利用索引直接设置一个项时,例如: vm.items[indexOfItem] = newValue 当你修改数组的长度时,例 ...
- vue 高度 动态更新计算 calcHeight watch $route
vue 高度 动态更新计算 calcHeight () { // this.tableHeight = window.innerHeight - 210 } }, mounted () { // co ...
- vue视图不更新情况详解
vue视图不更新情况详解:https://www.jb51.net/article/161371.htm
- 前端 | Vue nextTick 获取更新后的 DOM
前两天在开发时遇到一个需求:打开对话框的时候自动聚焦其中的输入框.由于原生的 autofocus 属性不起作用,需要使用组件库提供的 focus 方法手动手动获取焦点.于是有如下代码: <el- ...
- React和Vue的组件更新比较
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 24.0px "Helvetica Neue"; color: #404040 } p. ...
- vue 值的更新
用了vue开发了一段时间,基本上感觉都是比较好用的一个框架,刚开始还是会存在一些小坑的东西,这里先浅谈下值的更新问题. 1.本组件的一些变量,或者是主view(路由页面)一些值,是通过vuex 中st ...
- Vue 数组中更新属性值后,视图不更新,等待其他元素更新后会触发的解决办法
因为 JavaScript 的限制,Vue.js 不能检测到下面数组变化: 直接用索引设置元素,如 vm.items[0] = {}: 修改数据的长度,如 vm.items.length = 0. t ...
- Vue.nextTick DOM 更新循环结束之后执行延迟回调
在下次 DOM 更新循环结束之后执行延迟回调.在修改数据之后立即使用这个方法,获取更新后的 DOM. 简单来说,Vue 在修改数据后,视图不会立刻更新,而是等同一事件循环中的所有数据变化完成之后,再统 ...
- Vue中控制更新的方式
一. 强制更新的实例方法 vm.$forceUpdate() 迫使 Vue 实例重新渲染.注意它仅仅影响实例本身和插入插槽内容的子组件,而不是所有子组件. 在没有留意到数组或对象的变更检测注意事 ...
随机推荐
- [翻译]CURAND Libaray--Host API--(2)
Translated by xingoo 如果有错误请联系:xinghl90@gmail.com 2.3 返回值 所有的CURAND host端的函数返回值都是curandStatus_t.如果调用没 ...
- CI框架源码学习笔记2——Common.php
上一节我们最后说到了CodeIgniter.php,可是这一节的标题是Common.php,有的朋友可能会觉得很奇怪.事实上,CodeIgniter.php其实包含了ci框架启动的整个流程. 里面引入 ...
- FullCalendar插件的基本使用
我的另一博客地址:https://segmentfault.com/u/lyrfighting/articles 前段时间,一直在开发考勤系统,当时为满足设计的需求,选了好几个插件,最后决定采用Ful ...
- 微信Dat文件解码
最近在整理磁盘文件,因为经过一段时间的蹂躏后,磁盘实在是太多东西了,不整理一下,简直对不住我的SSD好嘛.偶然发现磁盘中某公司的文件夹占用空间简直不能再大,那可是我的C盘啊,合计才119GB的SSD空 ...
- [比赛|考试]nowcoder NOIP提高组组第二场
160/300pts,rank16(100,30,30) 在自身找毛病,首先做题感觉还不不够认真,比如T3那个我一开始审出来了,然后tmd忘了...gg...T1AC没啥好赞美的,T2T3暴力没拿全啊 ...
- Unity 动画系统 Animation 和 Animator的小实例
本文结合一个很简单的动画demo,分别采用2种方法,来对比Animation和Animator的使用方式: 方法1:单独使用Animation 方法2:Animation结合Animator 动画De ...
- 江西财经大学第一届程序设计竞赛 H
链接:https://www.nowcoder.com/acm/contest/115/H来源:牛客网 题目描述 晚上,小P喜欢在寝室里一个个静静的学习或者思考,享受自由自在的单身生活. 他总是能从所 ...
- Codeforces - 722C 区间合并
要求断裂的数列之和的最大值,只需在断裂处的下标修改为一个足够负无穷大的值就可以用线段树维护 这道题数据还是弱了点,如果n和ai均取最大可能我这个程序早就爆ll了(4e4的时候炸了),毕竟本来想着用GC ...
- java反射之一
public static void main(String[] args) { try { Class cla = Class.forName("com.money.test.Employ ...
- django 自带的验证功能
django.contrib.auth提供了很多验证方法 authenticate(): 提供了用户认证,在自带的数据库表中验证用户名和密码,需要username和password两个关键字参数 如果 ...