最后
文章到这里就结束了,如果觉得对你有帮助可以点个赞哦
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
也有一些数组相关的问题,之前已经在[列表渲染](/guide/list.html#)中讲过。
### 初始化数据
尽管 Vue.js 提供了 API 动态地添加响应属性,还是推荐在 `data` 对象上声明所有的响应属性。
不这么做:
var vm = new Vue({
template: ‘
})
// 然后添加
msg
vm.$set(‘msg’, ‘Hello!’)
这么做:
var vm = new Vue({
data: {
// 以一个空值声明 msg
msg: ‘’
},
template: ‘
})
// 然后设置
msg
vm.msg = ‘Hello!’
这么做有两个原因:
1. `data` 对象就像组件状态的模式(schema)。在它上面声明所有的属性让组件代码更易于理解。
2. 添加一个顶级响应属性会强制所有的 watcher 重新计算,因为它之前不存在,没有 watcher 追踪它。这么做性能通常是可以接受的(特别是对比 Angular 的脏检查),但是可以在初始化时避免。
### 异步更新队列
Vue.js 默认**异步**更新 DOM。每当观察到数据变化时,Vue 就开始一个队列,将同一事件循环内所有的数据变化缓存起来。如果一个 watcher 被多次触发,只会推入一次到队列中。等到下一次事件循环,Vue 将清空队列,只进行必要的 DOM 更新。在内部异步队列优先使用 `MutationObserver`,如果不支持则使用 `setTimeout(fn, 0)`。
例如,设置了 `vm.someData = 'new value'`,DOM 不会立即更新,而是在下一次事件循环清空队列时更新。我们基本不用关心这个过程,但是如果想在 DOM 状态更新后做点什么,这会有帮助。尽管 Vue.js 鼓励开发者沿着数据驱动的思路,避免直接修改 DOM,但是有时确实要这么做。为了在数据变化之后等待 Vue.js 完成更新 DOM,可以在数据变化之后立即使用 `Vue.nextTick(callback)` 。回调在 DOM 更新完成后调用。例如:
var vm = new Vue({
el: '#example',
data: {
msg: '123'
}
})
vm.msg = 'new message' // 修改数据
vm.$el.textContent === 'new message' // false
Vue.nextTick(function () {
vm.$el.textContent === 'new message' // true
})
vm.$nextTick()
这个实例方法比较方便,因为它不需要全局 Vue
,它的回调的 this
自动绑定到当前 Vue 实例:
Vue.component('example', {
template: '<span>{{msg}}</span>',
data: function () {
return {
msg: 'not updated'
}
},
methods: {
updateMessage: function () {
this.msg = 'updated'
console.log(this.$el.textContent) // => 'not updated'
this.$nextTick(function () {
console.log(this.$el.textContent) // => 'updated'
})
}
}
})
计算属性的奥秘
你应该注意到 Vue.js 的计算属性不是简单的 getter。计算属性持续追踪它的响应依赖。在计算一个计算属性时,Vue.js 更新它的依赖列表并缓存结果,只有当其中一个依赖发生了变化,缓存的结果才无效。因此,只要依赖不发生变化,访问计算属性会直接返回缓存的结果,而不是调用 getter。
为什么要缓存呢?假设我们有一个高耗计算属性 A
,它要遍历一个巨型数组并做大量的计算。然后,可能有其它的计算属性依赖 A
。如果没有缓存,我们将调用 A
的 getter 许多次,超过必要次数。
由于计算属性被缓存了,在访问它时 getter 不总是被调用。考虑下例:
var vm = new Vue({
data: {
msg: 'hi'
},
computed: {
example: function () {
return Date.now() + this.msg
}
}
})
计算属性 example
只有一个依赖:vm.msg
。Date.now()
不是 响应依赖,因为它跟 Vue 的数据观察系统无关。因而,在访问 vm.example
时将发现时间戳不变,除非 vm.msg
变了。
有时希望 getter 不改变原有的行为,每次访问 vm.example
时都调用 getter。这时可以为指定的计算属性关闭缓存:
computed: {
example: {
cache: false,
### 总结
秋招即将开始,校招的朋友普遍是缺少项目经历的,所以**底层逻辑,基础知识要掌握好!**
而一般的社招,更是神仙打架。特别强调,项目经历不可忽视;几乎简历上提到的项目都会被刨根问底,所以项目应用的技术要熟练,底层原理必须清楚。
这里给大家提供一份汇集各大厂面试高频核心考点前端学习资料。涵盖 **HTML,CSS,JavaScript,HTTP,TCP协议,浏览器,Vue框架,算法**等高频考点**238道(含答案)**!
**[开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】](https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0)**
资料截图 :
![](https://img-blog.csdnimg.cn/img_convert/edeaa71cbc745698bdedcfe65be40387.png)
![](https://img-blog.csdnimg.cn/img_convert/981487b285a8b90918f35c830c299df8.png)
![](https://img-blog.csdnimg.cn/img_convert/9866daffbebcf87b44d9530a59427834.png)
**高级前端工程师必备资料包**
![](https://img-blog.csdnimg.cn/img_convert/ba803e1b69e399b6739e3d33554d42a7.png)
g.csdnimg.cn/img_convert/9866daffbebcf87b44d9530a59427834.png)
**高级前端工程师必备资料包**
![](https://img-blog.csdnimg.cn/img_convert/ba803e1b69e399b6739e3d33554d42a7.png)