面向用户界面开发的未来(The Present Future of User Interface Development)

2018-06-06

文章并非通篇翻译,而是进行了摘要,有兴趣的小伙伴建议直接阅读原文,有什么好的建议,或者不对的地方,欢迎留言或者@我

原文链接:https://hackernoon.com/the-present-future-of-user-interface-development-ebd371255175


作者开篇balabala

简单来说,新的事物还没出现,目前的一些东西在人们看来就是最好的,我们不能停下脚步,要一直探索新的事物。
类似 React 这类的现代前端框架。

要看见整片森林,而不是只有树木(The forest, not the trees)

这节作者想要表述的要看见 React 真正为我们带来的是什么(UI与状态的同步、JSX),而不是只看到其中的一个点。

React 当时第一次宣布的宣传亮点是:可以通过声明式的语法来将程序的表现层与底层 DOM 进行分离,同时也能应对 DOM 的变化。这点与跨技术边界(HTML、JavaScript、CSS)进行分离的想法是相违背的,为了创建高内聚和低外部耦合的程序,我们将 UI 的表现、行为和状态都放在了一个 JavaScript 文件内,因此 React 使用语法拓展来实现这一特性,也就是 JSX。
虽然 JSX 刚开始的时候被各种嫌弃(包括我),没人愿意被指说其核心思想是错的。因此,在各种吹 React 多么创新的时候,JSX 这个 React 的核心属性常常会被人遗忘。

React 是一个组件化的平台(React is a Component platform)

React 的核心是它的组件化。虚拟 DOM 是一项很酷的技术,但是假如没有虚拟 DOM,React 是也可被创建出来的。JSX 虽然是一个很取巧的 hack,但它也只是一个语法糖。
到了现在,组件化的概念已经很成熟了,而且在 React 之前就已经出现了。React 并不是发明了组件化这个概念,而是找到了一个正常的使用方式。
React 中的组件更多的是关于组合和封装,另外,这也是得益于函数式和多功能性。

可组合性 (Composability)

可组合性给我们带了从程序的小模块开始一步步构建大程序的便利性。让完整的大程序通过小模块进行组合。这些小模块都是相互独立,各自的代码都可以编写、修改、增加、删除。

封装(Encapsulation)

将组件的展示、状态和行为进行封装。这样能够使得组件不受外部代码的影响。

函数式(Functional)

遵循函数式的编程风格,传入 props,返回一个 render。这样的方式可以使得组件更为健壮,更好理解。其它开发人员在使用时不需要关心它内部的运行机制。

多用途(Multi-purpose)

组件具有多种用途,比如可以作为视图组件、容器组件。优雅的组件中的API是可以剥离的,而且同时又具有组合性和封装性。

这种小而美的组件,给我们带来了所有想要的东西:易于学习、记忆、符合使用习惯,并且易于维护和协作开发。

组件是一种原始技术创新(Components are an Innovation Primitive)

虽然作者开头称赞了 React ,但是作者觉得虽然 React 的核心团队一直在努力开发,一些新的想法不断被提出、遗弃,以及各种设计模式的提测,但是放眼望去 React 的生态圈,还是不够完美。
作者应该是觉得 React 的最佳实践的方式还未被提出,一直在讨论要用高阶组件、渲染 Props等等何种方式来开发组件。

虽然 React 的配置丰富到令人有时感到厌烦,但是这就是 React 组件的强大所在。通过编写通用、颗粒小、可组合的、灵活性高、可靠性高的组件,使得我们可以在不放弃现有的工作时,不断的讨论、验证和接受新的想法。

现在有各种各样的库,而且我们开发人员可以在不改变原来代码的情况下使用这些库。

一些库是独立于 React 的存在,在 React 之外处理着更加负责的事情,类似 Redux,因此,React 组件模型,不仅是用户界面开发的原始技术,更像一种原始技术的创新。

与 JavaScript 的渐进式开发不同,React 可以在替换新的工具后重新适配原来的代码。和之前的框架(Ember、Angular)不同,React 在大的冲击下,依然可以保证不受破坏。

唯一不变的是变化(Change is the only constant)

拥有一个自适应的平台是很重要的,因为变化带来的代价实在是太大了。

当变化来临的时候,最好希望自己的系统可以适应这种变化,因为如果你的系统别无选择的话,那就悲剧了。

如果说某一项工具阻碍了进步,那么我们将会抛弃他们,继续前进。变革带来的代价是巨大的。我们要专注于将要创造的产品。

变革是不可避免的(Revolutions are inevitable)

创新的进程会经历两个阶段:

  1. 爆发性的增长
  2. 很长的增量细化过程

变革的速度会很快,但是提炼会很慢

React 是一场变革,在一夜之间颠覆了之前的思路,改变了我们开发者的体验。现在我们正常不断的优化它,直到无法有更多的优化点。

我们要不断的创新和创造,知道我们开发者的觉得能够保证我们的生态系统去适应改变。

编写一个响应式的软件(Let’s write software that’s responsive to change)

我们可以从 React 的生态种吸取经验,让我们的代码受到冲击时,是弯曲,而不是被折断。

从小做起(Build big things from small things)

从更小的单元开始编写。认真思考将要定义的 APIs 和接口,以便他人使用。

让代码易复制和删除,但是不易被改变(Make code easy to copy and delete, not easy to change)

优秀的代码,应该是可以被很好的继承和组合的。将代码封装好,让封装后的代码只做一件事。

面向离职编程(Write code for humans first)

写好代码的命名、注释和文档等,这样能够使你的代码让更多的人都读懂和看懂

尽量和编程语言一致(Stay close to the language)

让你的代码尽量去贴合你所用的语言,避免在原来的语言上去创造新的 DSLs 和非常规的界面

尽量不要破坏规则(Don’t break things if you don’t have to)

稳定性本身就是一种价值。因为变化在最坏的情况下可能会导致你之前的付出都浪费了,在你去破坏一项规则之前,需要先衡量你的成本和最终的收益。

保持开放的心态(Keep an open mind)

有时要懂得拥抱变化,接受新的想法,不要害怕去改变,虚心听取他人的意见。

现在来看,React 是一张奖票(React is the winning ticket (for now))

作者觉得目前 React 是构建用户界面一种比较好的方式,相信 React 也可以拥抱变化。
现在也感谢 React 的这种稳定性,相信在这段时间内可以享受它所带来的丰富的体验和稳定的架构。

下面是我的微信

欢迎骚扰

ww1o01