摘要:对于一个每秒帧的状态改变,清楚的知道那些节点被影响,更新它们,而避免那些不受影响节点的更新。而脏检查或差分,往往会触发整个子树的重新渲染。截至目前还未发现开放和可复现的。
原文地址:http://blog.evanyou.me/2015/1...
vuejs是一个建造web界面的库。配合其他工具,你也可以称它为“框架”(尽管它更多的看起来像是一堆配合很好的工具集)。如果你从未听说过vue,你可能会想,好吧,我懂了,又一个js框架。事实上Vue并不新,因为我两年以前就开始了它的原型开发,第一个正式版发布于2014年2月,随后不断更新进步,至今已经有很多产品在使用Vue。
那么,Vue到底是干嘛的呢?究竟什么造就了它的与众不同?当这个地球上已经有了angular,ember和react,我为什么还要学习vue?通过带你深入vuejs的设计概念,本篇文章希望能给你一些灵感, 我相信读后你自会有自己的答案。
响应式保证数据和展现的一致很难,是吗?
我们先从最基本的任务开始,展示数据,假设我们有如下一个简单的对象
var object = { message: "Hello world!" }
模板:
{{ message }}
在Vue里面我们这样将它们结合:
new Vue({ el: "#example", data: object })
看起来我们仅仅渲染了模板,当我们更新了数据,我们要如何去更新界面呢?什么都不用做,因为Vue已经把这个对象变成了响应式的,当你更改了object.message, html会自动更新。更重要的是,你无须担心如果超时去调用$apply,或者setState(),监听Store的事件,或者创建框架监听属性,比如ko.observable()或 Ember.Object.create(),vue就这样简单的运作。
Vue同时提供了一个完美的计算属性(computed properties):
var example = new Vue({ data: { a: 1 }, computed: { b: function () { return this.a + 1 } } }) // both a & b are proxied on the created instance. example.a // -> 1 example.b // -> 2 example.a++ example.b // -> 3
计算属性b追踪a,自动同步,不需要声明a为b的依赖。
另外,简单类模式(POJO-based)允许很简单的整合任意类型的数据资源或状态管理方案,比如,这里有一个整合了vuejs组件和Rxjs的观察模块,仅仅用了30行代码。
数据绑定对小型demo来说还不错,那么大型应用呢?
对于结构复杂的界面,vue采用了与react十分类似的方案:从上至下的组件化。我们先来看一个可复用组件的例子:
var Example = Vue.extend({ template: "{{ message }}", data: function () { return { message: "Hello Vue.js!" } } }) // register it with the tagVue.component("example", Example)
现在我们就可以用这个组件在其他模版里,就如同一个自定义页面元素:
一个组件包含另外一些组件,它们形成一个UI树。为了保证它们之间的组合性,Vue组件同时包含如下内容:
定义如何从父级获取数据,使用 props
发布自定义事件,以便在父级作用域中触发它
组合父级引入内容,使用
这里不过多探讨细节,感兴趣请查看官网。
模块化21世纪了,我们不应该把所有东西都放在全局作用域里
我们使用打包工具(Webpack, Browerify)以及 ES2015.每个组件都是一个模块,Vue会自动把配置对象转换到组件结构里,所以我们只需要在模块里简单的输出如下内容:
// ComponentA.js export default { template: "{{ message }}", data () { return { message: "Hello Vue.js!" } } }
// App.js import ComponentA from "./ComponentA" export default { // use another component, in this scope only. // ComponentA maps to the tagcomponents: { ComponentA }, template: ` ` }Now I"m using another component.
看起来不错是吗?如果我们能讲页面的模版,样式和js逻辑封装到一个文件里会更好!尤其是他们本身还有各自的语法高亮。实用工具诸如 Webpack + vue-loader 或者 Browerify + vueify,我们可以这么做:
什么?我们是不是重新定义了web组件?但是css依旧是全局的。
是的,一定程度上我们重新定义了web组件,除了:
我们也可以进行css封装,只需添加scoped属性到标签内,它甚至不会继承到自己的子组件里。
每个Vue组件都会被压缩到一个js模块内,不许加任何垫片完美兼容至IE9以上,也可以将其添加到自定义元素里。
ES2015 默认被支持。
你可以使用任何预处理器(less, coffeScript ...) 在任意语言块。
当使用Webpack + vue-loader 方案时,你可以引用webpack全部的强大功能,例如静态资源加载和处理,因为Vue里(单文件组件)模版和样式都是通过webpack的html-loader,css-loader来实现的,你可以通过组件URLS来加载模块依赖。
很好,我们的组件就长这个样子:
对了,我提到vue组件是热加载的了吗?
可以用Vue做炫酷的东西吗?
Vue内置了过渡系统,目前已经有很多获奖网站使用它们。
Vue相应系统内部对渐变性质的状态改变有着非常好的支持,对于其他框架而言,这里有些混乱,比如采用脏检查(dirty-checking) 或者 dom差分(Virtual Dom diffing)。对于一个每秒60帧的状态改变,vue清楚的知道那些节点被影响,更新它们,而避免那些不受影响节点的更新。而脏检查或dom差分,往往会触发整个dom子树的重新渲染。对于小项目而言这还行,但是比如大项目里每秒60真的改变效率就不行了,就算是可以接受,这些方案也消耗了系统过多的资源。查看这篇讨论,搞明白react,vue对于动画渲染方面的效率差异。
下面是Vue一个状态渐变的例子:
http://codepen.io/yyx990803/p...
我想创建的是应用,路由在哪里?
和React一样,Vue本身不提供路由,但是你可以通过Vue-router来使用路由。它提供了内置路由映射到内置组件的功能,并且提供了颗粒度很好的过场控制,以下例子:
import Vue from "vue" import VueRouter from "vue-router" import App from "./app.vue" import ViewA from "./view-a.vue" import ViewB from "./view-b.vue" Vue.use(VueRouter) const router = new VueRouter() router.map({ "/a": { component: ViewA }, "/b": { component: ViewB } }) router.start(App, "#app")
app.vue的模版
This is the layout that won"t change
项目中的实际应用,参照 HackerNews Clone ,基于Vuejs, vue-router, webpack 和 vue-loader。
稳定性Vue是个人项目?安全性如何?
是的,Vue是一个个人项目,如果你想找一个企业级技术支持团队,那么Vue并不是。但,我们来看下数字,Vue自从0.11版本就保持着100%测试覆盖率,而且肯定会继续,github issues平均13小时内解决,目前已解决1400+ issues。截至目前还未发现开放和可复现的bug。
译者:以下略去最后两段,作者主要说了历史版本,版本迁移,希望各位持续关注和支持以及相关资源。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/80282.html
摘要:小弟在前端摸爬滚打一段时间,发现前端的比较好的文档比较分散,特别是中文的,我平时都是收藏在浏览器里,以后有好的教程和综合性的文档我会更新到这里。小组中文文档,很全。 小弟在前端摸爬滚打一段时间,发现前端的比较好的文档比较分散,特别是中文的,我平时都是ctrl+D收藏在浏览器里,以后有好的教程和综合性的文档我会更新到这里。一则可以做个记录,防止丢失。二则有需要的朋友可以来我这里找一找。 ...
摘要:上图是二月份前端框架排名,位居第一,排名第三。我们认为前端模板和组件代码是紧密相连的。直到最近看了文档,才发现另有蹊跷。 欢迎大家关注腾讯云技术社区-segmentfault官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 纪俊,从事Web前端开发工作,2016年加入腾讯OMG广告平台产品部,喜欢研究前端技术框架。 这里要讨论的话题,不是前端框架哪家强,因为在 Vue 官网就已经...
摘要:一步一步学习一直都有发布他开发的教程。在上有他免费的教程,并且宣称是世上最深入的系列。基础在上有个非常的视频教程。的官网教程非常值得你从头读到尾。使用框架这是我们最后一个教程的介绍。不过在和已经有为你准备了不错的免费课程哈 一步一步学习Vue 2 (Laracasts) Jeffrey Way一直都有发布他web开发的教程。他曾经在30天内教会了我使用jquery。在Laracast...
摘要:因为用户不用在第一次进入应用时下载所有代码,用户能更快的看到页面并与之交互。译高阶函数利用和来编写更易维护的代码高阶函数可以帮助你增强你的,让你的代码更具有声明性。知道什么时候和怎样使用高阶函数是至关重要的。 Vue 折腾记 - (10) 给axios做个挺靠谱的封装(报错,鉴权,跳转,拦截,提示) 稍微改改都能直接拿来用~~~哟吼吼,哟吼吼..... 如何无痛降低 if else 面...
摘要:积少成多,最后造成内存泄漏。前端内存泄漏的影响,都是发生在客户机器上,而且基本上现代浏览器也会做好保护机制,一般自行刷新之后都会解决。但是,一旦后端绘制内存泄漏造成宕机之后,整个服务器都会受影响,危险性更大,搞不好年终奖就没了。 引言 Memory Leak 是最难排查调试的 Bug 种类之一,因为内存泄漏是个 undecidable problem,只有开发者才能明确一块内存是不是需...
阅读 1563·2021-11-22 15:33
阅读 1691·2021-11-15 18:01
阅读 594·2021-10-09 09:43
阅读 2579·2021-09-22 16:03
阅读 729·2021-09-03 10:28
阅读 3532·2021-08-11 10:22
阅读 2693·2019-08-30 15:54
阅读 1742·2019-08-30 14:21