手把手教你如何在HTML中引入外部JS文件_WEB前端开发
在学习前端的时候,小伙伴们一定对于在HTML中如何引入外部JS文件感到困惑,下面小编教你HTML引入外部JS文件的方法。
vue中的nexttick原理实现是基于Vue实现响应式并不是数据发生变化之后DOM立即变化,而是按一定的策略进行DOM的更新。
一、原理
1.异步说明
Vue 实现响应式并不是数据发生变化之后 DOM 立即变化,而是按一定的策略进行 DOM 的更新。
2.事件循环说明
简单来说,Vue在修改数据后,视图不会立刻更新,而是等同一事件循环中的所有数据变化完成之后,再统一进行视图更新。
eg:
图解:
事件循环:
第一个tick(本次更新循环)
5种你一定不知道的HTML空格表示方法_WEB前端开发
HTML提供了5种空格实体(spaceentity),它们拥有不同的宽度,非断行空格是常规空格的宽度,可运行于所有主流浏览器。
其他几种空格在不同浏览器中宽度各异。
1.首先修改数据,这是同步任务。
同一事件循环的所有的同步任务都在主线程上执行,形成一个执行栈,此时还未涉及DOM.
2.Vue开启一个异步队列,并缓冲在此事件循环中发生的所有数据变化。
如果同一个watcher被多次触发,只会被推入队列中一次。
第二个tick(‘下次更新循环’)
同步任务执行完毕,开始执行异步watcher队列的任务,更新DOM。
Vue在内部尝试对异步队列使用原生的Promise.then和MessageChannel 方法,如果执行环境不支持,会采用 setTimeout(fn, 0) 代替。
第三个tick(下次 DOM 更新循环结束之后)
二、应用场景及原因
1.在Vue生命周期的created()钩子函数进行DOM *** 作一定要放到Vue.nextTick()的回调函数中。
在created()钩子函数执行的时候DOM 其实并未进行任何渲染,而此时进行DOM *** 作无异于徒劳,所以此处一定要将DOM *** 作的js代码放进Vue.nextTick()的回调函数中。
与之对应的就是mounted()钩子函数,因为该钩子函数执行时所有的DOM挂载和渲染都已完成,此时在该钩子函数中进行任何DOM *** 作都不会有问题。
2.在数据变化后要执行的某个 *** 作,而这个 *** 作需要使用随数据改变而改变的DOM结构的时候,这个 *** 作都应该放进Vue.nextTick()的回调函数中。
具体原因在Vue的官方文档中详细解释:
Vue 异步执行 DOM 更新。
只要观察到数据变化,Vue 将开启一个队列,并缓冲在同一事件循环中发生的所有数据改变。
如果同一个 watcher 被多次触发,只会被推入到队列中一次。
这种在缓冲时去除重复数据对于避免不必要的计算和 DOM *** 作上非常重要。
然后,在下一个的事件循环“tick”中,Vue 刷新队列并执行实际 (已去重的) 工作。
Vue 在内部尝试对异步队列使用原生的Promise.then和MessageChannel,如果执行环境不支持,会采用setTimeout(fn, 0)代替。
例如,当你设置vm.someData = 'new value',该组件不会立即重新渲染。
当刷新队列时,组件会在事件循环队列清空时的下一个“tick”更新。
多数情况我们不需要关心这个过程,但是如果你想在 DOM 状态更新后做点什么,这就可能会有些棘手。
虽然 Vue.js 通常鼓励开发人员沿着“数据驱动”的方式思考,避免直接接触 DOM,但是有时我们确实要这么做。
为了在数据变化之后等待 Vue 完成更新 DOM ,可以在数据变化之后立即使用Vue.nextTick(callback)。
这样回调函数在 DOM 更新完成后就会调用。
以上就是vue中的nexttick原理的详细内容,更多请关注ki4网其它相关文章!
ps左侧工具箱找不到了怎么办?_WEB前端开发
解决方法:首先点击ps顶部菜单栏中的“窗口”按钮,接着在“窗口”的下拉菜单栏中点击“工具”按钮,这样工具箱就会出现在左侧了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)