4 min read

Vue.js作者尤雨溪谈VueJS
Modern Web 播客记录摘记

英文原文中文翻译原文:banq @ 解道JDON

Vue.js作者尤雨溪谈Vue.js当初是如何创建的,以及初学者学习曲线,包括它是如何处理数据和动画的,以及它与Angular和React的区别。下面是他大意翻译:

如何创建Vue.js

第一次提交Vue.js是在2013年末,当时我还在Google创新实验室工作,那时它完全是一个随机的实验,我当时正在研究很多快速的UI原型,其中使用了Angular,只是感觉太麻烦,引入了许多实际上并不需要的东西,但也有一些我真正喜欢的东西,比如数据绑定,更新状态的方式,你不必担心强制直接操作DOM了,因此,想提取这些有价值的部分。

当我阅读其他人的代码,或者我查看新的即将推出的框架时,我会看到那些好的想法或良好的编码最佳实践,我可能没有机会将它们应用到我的实际日常工作中,但我可以尝试将它们应用到Vue中。

Vue.js2.0是另一个完全重写并引入了一堆新功能,我们现在使用虚拟DOM,我们支持服务器端渲染SSR,甚至是原生渲染。

在2016年初,中国开发者社区有一篇文章讨论什么框架将赢2016年或17年?有个家伙发帖预测Vue会!

关于Redux处理数据

基于一切的经验都是超级简单的,就像你有一个对象,你把它交给一个Vue实例,它就变成了Reactive响应式的,每当你改变它时,数据就会自动更新,当你构建原型或试图获得概念证明时,这实际上非常有用,因为 - 它与我们对事物的思考方式一致,当我们想要在界面中更改某些内容时,会有一些相应的状态需要更改。

不变性和函数式编程今天变得越来越流行,但最终如果你想到Redux采取Action方式处理数据,然后返回不可变数据的复制副本,好像是一种改变状态的奇特的方式。(banq注:Event事件概念还是不容易被大众直觉接受)

Vue只是试图坚持我们大多数人最直观的方式 ,特别适合那些不愿意重度学习函数编程的人,更愿意在直觉方式考虑事情原理的人,

Redux和所有与Flux相关的模式被发明是用来处理大规模系统,

是为了处理状态变化非常复杂的情况,可能还希望与拥有多个开发人员的团队进行协作。在这种情况下,明确可能发生变化的内容,以及能够在调试时跟踪实际发生变化的内容变得更加重要(banq注:事件溯源event sourcing)。

Vuex是严重受Flux和Redux激励和影响,但是最终却是Flux的一个特殊版本,能很好地处理可变性和Vue的响应系统。

我只是觉得Flux,甚至是Redux,更像是一种管理状态而非特定实现的模式,我们想要实现共同目标是一样的,就是让状态变化变得可预测,可维护,并使代码的意图更容易被其他开发人员理解,我认为如果我们能够保留这些特征,那么你的状态是直接被修改,还是返回的是数据被修改的动作(导致状态被修改的事件)并不重要。(banq注:Event Sourcing的概念不容易被理解。)

返回不可变的数据修改动作真正好处是:你可以自然地获得每个状态更改的快照(banq注:可以追溯状态改变的原因,但是带来复杂性和读取性能问题)。事实证明,在大多数情况下,在Vuex中stringify出一个状态很快,除非你要撤消/重做所有完整快照。在大多数情况下,它足够快,可以捕获你想要跟踪的状态的快照。

最后,React社区重视不可变性的另一个原因是因为它可以更容易地优化React组件呈现。(banq注:不可变性是函数范式的灵魂,一荣俱荣。)

当你使用Vuex和Redux时,最终的开发体验实际上非常相似,因为唯一的区别在于你如何改变状态,而且Vuex更直接,就像你正常改变状态一样,

我觉得像Rx observables这样的东西在这方面发挥作用,因为我发现关于Flux的核心思想是用户会发出Action行动,而这些行动实际上有点像原始意图。开发人员仍然负责的大部分工作是将这些意图转化为实际的状态改变(banq注:命令导致状态改变)。因此,当与异步操作结合时,该过程变得非常复杂,我认为这就是Rx很适合的地方

当您了解分派dispatch用户操作给Rx时,它会被Rx转换为你希望看到的最终状态改变,并且系统会自动自动映射这些改变到Vue的更新。

I'd love to hear what you think about this essay. Your feedback makes my work better. You can chat with me on Twitter and Hacker News .