我们为啥需要 React( 四 )

我们为啥需要 React

看完上图是不是感觉和React相似度已经60%+了?当然还有*.vue/vue.component,是否作者是考虑让用户安稳的过渡到JSX?还是维护JSX和Template呢?那么最佳实践是什么呢?React 是唯一一个让我真正体验到编写代码快感和舒适感。(尽管在此之前我很排斥JSX)简约的语法,轻量的API,组织代码时的稳健,时时刻刻让我爽到溜起....怎么简约轻量?可以看这里多个主流框架的语法对比:Front-end Hyperpolyglot稳定的API,每次升级都是在强化和优化,相当少少少少量的API更新,即将废弃的语法,都会有警告提示,让我们更快的升级架构。flux/reflux/redux 不仅仅只能用在React,也能用在Vue/Angular等等框架,仅仅只是一个数据流思想,您选择性地使用。 其实概念很清晰,举个Apple云很简单的例子来形容Redux:我们的设备(Iphone/Ipad/Mac)的照片、文档等信息,都发送到云端。而我们关联云端的设备,当云端有数据更新,就会自动更新到有关联的设备或应用里。而我们所说的Action 就是我们点击数据发送云端的指令;而我们所说的Reducer就是接口,我们需要上传照片和文档,都需要转化到 成云端可以接收的数据格式。比如图片,需要转成二进制等等。而云端就是我们所说的Store,存储了数据,很自然的,我们可以在云端查看数据上传历史,还原某一条数据历史等等,当然更多可以想像的功能,都可以在云端实现。而我们需要实现React-Redux / Vue-Redux / Angular-Reudx 等等给到给到各个设备接收数据。例如React的Connect,代码连接到云端接收数据并更新到组件。React/Redux并不是没有坑:1、setState 大量数据时(如700多条的列表),会有点点卡顿,当然我们可以通过优化得到解决2、父组件更新某个子组件数据时,需要父组件重新组织,会导致其它子组件重新组装,虽然有vdom,但是这样显得不那么人性化。而且某个子组件内部有某些个state需要保持时,会丢失。需要shouldComponentUpdate..,当然你可以把组件的数据state=》子组件的props设计得更浅一些,至多2-3层,使用 redux,只connect具体需要更新数据的组件,粒度越细越好,保证单个state只更新到一个组件,这样还能带来易组装的好处。当然粒度越细,自然代码量也上来了,你也可以采用 stateless(无状态)组件去简化代码。各中取舍,取决于您的设计。3、React-Redux经常在更新时,会产生过渡使用的问题,比如说父组件和子组件都connect,结果会导致第2点所说的状态丢失和重复render问题,还会有数据穿透的问题,因为connect只比较一层state。这时引入immutable能够带来较好的效果,不过个人认为完全没有这必要。已经有大量大神使用Event的方式去解决此类问题。而我,正在考虑撸个类似于Redux的方案。总得来说,你需要React,它并不复杂,而是你听到的噪声太多。对于大型项目,推荐 Webpac 2 来构建业务代码, Rollup 来打包你的小轮子。使用Rx优化你的数据流。Typescript强健你的代码,提升你的开发效率(头一周可能会有些痛苦)。但在此之后的收益是非常高的对于中小型项目,推荐React/Redux/React-Router来构建你的代码不要担心体积,因为CDN都有GZIP,能够压到原体积最高22%比例。不要担心打包慢,因为通过优化 webpack,开发环境全量打包能快到 5秒, 生产环境能快到12秒。(vendor 5m 业务代码2m多)不要担心噪声多,正因为如此,你的提升才会变得更快。不要担心性能问题,因为90%+的场景下,你并不需要考虑性能问题。不要开发效率问题,前人种树,后人乘凉的感受,会让你更舒适。不要说React复杂,因为比起Angular、Vue要简单些。只不过没有更好的最佳实践和文档,所以你迷失了。React 有 Flux/Reflux /Redux ,你只需要选择 Redux,Vue也同样有VuexReact 需要 webpack / es6 等, Vue也同样需要webpack / es6,只是有它有 Vue-cli架手脚,但是React也有各种boilerplate。比如:GitHub - mxstbr/react-boilerplate: A highly scalable, offline-first foundation with the best developer experience and a focus on performance and best practices.再比如最新的 webpack 2 / React hot Loader 3 boilerplate: GitHub - ctrlplusb/react-universally: An ultra low dependency node v6 universal react boilerplate with an amazing dev experience.请Vue/Angular粉不要骂我,我就照我的经历说,有什么说得不对,还望纠正。


推荐阅读