请选择 进入手机版 | 继续访问电脑版

HTML5星空

[S3-E412]作为老司机使用 React 总结的 11 个经验教训

[复制链接]
发表于 2017-8-31 19:20:21 | 显示全部楼层 |阅读模式

本文:【第3章第412回】 文章底部可跳转至 目录 查看更多文章


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 的 前端中心频道 前几天刚好播放了 关于 SVG 的节目 ,值得一看。


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. 严格的代码检查是一把双刃剑


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


我想我们大多数人都会同意代码质量不仅仅是你用对了空格符和制表符。当打开一个文件时候,代码给你那种赏心悦目的感觉会让你写代码而舒服,而且你的注意力可以专注于你的代码逻辑。


代码检查也可以帮助你发现一些错误,比如常量分配和书写错误,甚至经典的“Undefined is not a function”错误。


我的建议:拥抱你的团队所要求的代码审查规则吧。我在 JS 中使用 ESLint,在 Sass 项目 Atom 中使用 scss-lint。你也可以设置规则来方便转换,如果你要求很严格,不想让不好的代码提交上去的话, pre-push 会执行一个 npm 脚本来做 push 前的检查。


10. 在 Express 项目中进行 React 渲染是可行的


有很多博文介绍如何安装普通应用,但是大多数都假设你是想要一个单页面应用,很少文章介绍如何在一个多页面 Express 应用中渲染单 React 组件。


我的建议:这种情况下,ReactDOMServer 会成为你的朋友。你可以把组件都当成是页面片段,把它们传递给一个模板来渲染。


11. Saga 使我的大脑一团浆糊


Saga 是 Redux 中间件,基于 ES6 的生成器新特性。“生成器定义了可以保持自己 state 的迭代算法”。在实践中它和正常的 JavaScript 工作流是不一样的,因为在另一个基于 Promise 代码执行的时候,这个函数可以在执行过程中暂停。


我应该不是第一个,也不是最后一个说这话的人,Saga 让我的大脑一团浆糊。刚学习 Saga 的时候一团乱麻,不过最终我还是征服了它。不过回头想想,如果我一开始就理解了生成器的话,可能事情发展会变的好一些。


我的建议:如果你是第一次使用 Saga,并且团队中没人有相关的经验的话,你最好还是先理解 Promise 和 Generator,会对你很有帮助。


转自:http://web.jobbole.com/91075/

原文出处: Jolyon Russ   

译文出处:胡子大哈   


>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

更多文章点击 目录 查看http://mp.weixin.qq.com/mp/homepage?__biz=MzAwMzMxOTUxOA==&hid=9&sn=c494536c68e349573ce6b2061aecd590

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>


 ==========阅读原文==========



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快讯
发布主题 快速回复 返回列表

     京ICP备14042305号

html5star team © 2012-2013 html5星空 Comsenz Inc.

GMT+8, 2017-9-19 21:23 , Processed in 0.148197 second(s), 35 queries .

快速回复 返回顶部 返回列表