作为老司机使用 React 总结的 11 个经验教训

一开始在 React 路上摸爬滚打的时候,不知道该寻找些什么,但是这些年来,回头总结经验才发现,要找的已经在脑子里了。下面是我自己在学习 React 历程的一些关键点,以及我的一些背景情况。

我已经写了 18 年的代码,其中 13 年是全职专业的老司机了;

其中 6 年时间都专注于 Flash 开发;

直到史蒂夫·乔布斯的公开信表示不支持 Flash;

我刷过 HTML,CSS 和 JS 这几个技能点;

曾经在主流 JavaScript 框架的研究上纠结了很久,当时感觉它们把大量的逻辑都隐藏在了背后;

辞职开始外包生活,主要做原型;

看了很多 React Demo;

2015 年 10 月,正式开始 React 项目生涯并且爱上了它;

2016 年 1 月,改了我在 LinkedIn 上的 Title:React 开发者。

接下来是我所总结的一些经验,希望能对你有所帮助。

1. 多个简单组件比一个高度定制化组件要好

改变 React 组件行为依赖于你传递的 props,这是个很有用的功能。在项目初期就养成一个好的编程习惯对未来很有好处:创建一些通用组件,使其在其他地方也可以使用

当你开始了项目以后,对于一个组件你可能会不断地扩展这个组件的使用外延。一段时间以后你会发现,你会疲于修复 bug,在 A 场景下修复好以后,又发现在场景 B 和场景 C 下又发现了 bug。

我的建议:如果一个组合组件导致了 bug,那么把它分解成若干个简单组件,即便代码重复也值得。

2. 如果你发现了库中有 bug,尽量提 Issue 和 Pull Request

只要你使用 React,就一定会用到开源软件,不论是 React 核还是 1000 多个可用的 NPM 模块。如果你发现了库中有 bug,那就提 Issue 上去。更好的情况是,如果你 fix 了一个 bug,一定要提 Pull Request 把修复的代码整合进去,因为使用这个库并且遇到 bug 的并不只是你一个人,这样做会使整个生态变得更好。

我的建议:回馈社区,即便你只是修正了文档中的拼写错误也好。

3. 首先完成一次 build 过程,然后再写 React 代码

我知道这并不是一个常见的场景,但是我就遇到过,当我开始一个外包项目并且开始 build 的时候,发现有一些依赖编译的包不存在。进而才发现实际上这个 React 是用于一个 Backbone 项目中的。在 Backbone 中实现 React 组件其实非常简单,使用 Redux 可以在这两个之间进行通信。它们之间的通信必须要通过 Browserify 或者 Webpack 编译到一起才可以。

我的建议:如果在一个现有的项目中应用 React,首先用 Browserify 或者 Webpack 走一遍 build 过程比较好。

4. 对于简单的数据可视化,原生 SVG >= D3

D3 在数据可视化方面做的非常棒,但是如果你只是要做一些简单的数据可视化,那么渲染原生 SVG 就可以满足你的工作需求了。

我的建议:学习一些 SVG 基础,在你需要更复杂功能之前这就够了。Youtube 的前端中心频道前几天刚好播放了,值得一看。

5. 如果你只有两周的项目期限,保持功能精简

如果你要做的工作只是渲染,那么 React 和 React-DOM 就足够了。

Redux 的处理很耗费时间和精力,它对于处理大项目中的多层 UI 很有用。但是如果你的项目很简单的话,那么通过传递 props 和 callback 就好了,不必要使用 Redux。

我的建议:模板项目是非常有用的,但是如果你想保持项目精简的话,从 React 和 React-DOM 开始是一个很好的选择。

6. 单独依赖于 CSS 动画来移动元素会很慢

我没有办法精确地告诉你什么时候会看到帧速率显著下降,也许是 30 个元素的时候,也许是 300 个元素的时候。但是可以告诉以一些对你有帮助的经验。充分利用 React 的虚拟 DOM,并且保证只在需要的时候进行渲染和重渲染。

就是说只渲染那些在视图窗口中可见的组件。

我的建议:在低配机器上进行测试,同时还要测试边界数据来看一下你的程序在受限的情况下表现如何。

7. 研究模板是一种很好的开始方法,但是...

如果你正在学习新库或者新框架,从模板项目开始是比较好的方法。如果你们公司有自己的模板就更好了。

但是不要认为模板项目可以解决所有问题。实际工作中你会发现,它所实现的根本就不是你想要的那样。如果你没有自己从头开始构建一个项目,那后面可能会出现很多问题。另外,如果你对一个模板项目的各种特征不是很了解的话,你很可能会重构一个它已经存在的功能。

我的建议:把模板项目用在它们最擅长的地方——快速启动项目。不要害怕重构它们,你要让它们按照你的意志去运作,另外,最好提前了解你所使用的模板项目的特性。

8. 保持组件、connected 组件和容器的可控

用 Redux 来 build 的时候,最好要限制组件的个数,同时要尽量保证 actions/reducers 的可复用性。

组件应该只依赖于自己的 props。

Connected 组件应该通过 Redux 来访问应用数据,并且应该只渲染自己的 DOM 和子组件。

容器充当一个演奏师的角色,取数据并且渲染组件。

我的建议:注意保持命名和功能的一致性。

9. 严格的代码检查是一把双刃剑

我开发过各种各样的项目,经历过各种形式的代码检查。从一点代码检查都没有的项目,到甚至连一个悬空逗号都会拒绝提交的项目。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwywzg.html