前言

说起React,那也是近一年多时间火起来的前端框架,其在Facebook的影响力和大力推广下,已然成为目前前端界的中流砥柱。在如今的前端框架界,React、Vue、Angular三分天下的时代已经到来,而曾经jQuery一统天下的局面已一去不复返。
三分天下,前端虽乱,但美其名曰“繁荣”。每一次突破性的革命必定会迎来成千上万的追随者,我们可以看一下一份来自NPM的统计数据:

上图统计的是全球范围内React、Vue、Angular在npm中的月下载次数,统计地址可以访问:npm-stat。从图中我们不难发现React虽初出茅庐,但其影响力已经奠定了在前端框架中的霸主地位。

而对于React的开发者来说,如何利用React构建现代化的前端项目,产出高质量的前端代码才是学习React的重点。所以本文就我自己平时利用React开发项目的经验和个人见解,来谈谈在React项目中需要了解和容易忽略的“小事”。

那些小事

俗话说“千里之堤毁于蚁穴”,在React开发中我们不能忙于进度而忽视了细节。

1.使用容器组件与展示组件

容器组件和展示组件名词来自于redux文档。如果你想让自己的React项目变得清晰可维护,那么你需要了解并使用它们。

这里我们将组件分成两类,一类叫“容器组件”,我一般将它们放在containers文件夹下。这一类组件可以理解为最顶层的组件,其功能仅仅做数据提取,然后渲染对应的子组件。

另一类叫“展示组件”,我一般将它们放在components文件夹下。这一类组件可以理解为只具有展示性的子组件,其功能仅仅是展示性的,所有数据都通过 props 传入。

这样分类的好处在于:关注分离,更易复用及维护,数据集中处理等。具体可以参见:译文《容器组件和展示组件》

2.组件划分不宜过细,层次不宜过深

曾经有人问我React组件的划分应不应该太细,比如是不是可以把一个输入框划分为一个组件?

我个人认为组件不应该按照DOM元素来划分,而是应该按照功能来划分。如果你的一个页面中包含了两个功能,比如表格搜索、弹框查看,就可以将其划分为两个子组件。

同样的组件层次也不宜过深。很多时候会存在组件中包含组件的情况,这样就出现了组件之间的嵌套层次。我个人认为组件间的嵌套层次不宜超过3层,如果嵌套层次太深会直接导致功能及状态的难以维护,就像if else语句嵌套太深一样。

3.Redux和state并不冲突

很多开发者可能会认为用了Redux来管理数据状态后,我们的组件中就不需要state了。其实我个人认为Redux和state并不冲突。

Redux主要用于管理那些公用及异步的状态,而state一般用于管理组件独有的状态。如果你的组件中存在其不必和其他组件公用及非异步的单一数据,那么你直接可以写在state中,比如一些loading的状态和显示隐藏的状态等。

巧妙的使用Redux和state可以帮助我们更好的管理数据流。

4.不要渲染当前用不到的组件

在用户操作中,有些组件可能不是一开始展示页面的时候就需要用到的,比如某些弹框等。这样的组件除了将其隐藏外,我们最好不要让它渲染在页面上,当用户点击触发的时候再进行渲染,这样一来便起到了优化加载的作用。

5.除了划分组件还应划分reducer

相比组件的划分,reducer的划分也同样重要。随着应用的膨胀,我们可以将拆分后的 reducer 放到不同的文件中, 以保持其独立性并用于专门处理不同的数据域。

如果一个中大型的项目不划分reducer,会导致单一的reducer文件代码过于冗长而难以维护。我们可以使用Redux提供的 combineReducers()来将拆分的reducer进行合并。详见:Redux中文文档

结语

事无巨细,人无完人。一个优秀的React项目并不代表其没有缺点,代码优化是一个长期的过程,唯有发现问题总结问题才能给我们带来新的突破口。

谈谈React那些小事的更多相关文章

  1. 谈谈React Native环境安装中我遇到的坑

    谈谈React Native环境安装 这个坑把我困了好久,真的是接近崩溃的边缘...整理出来分享给大家,希望遇到跟我一样问题的小伙伴能尽快找到答案. 首先,这是在初始化App之后,react-nati ...

  2. 谈谈 React.js 的核心入门知识

    近来React.js变得越来越流行,本文就来谈一谈React.js的入门实践,通过分析一些常用的概念,以及提供一些入门 的最佳编程编程方式,仅供参考. 首先需要搞懂的是,React并不是一个框架,Re ...

  3. [转] 「指尖上的魔法」 - 谈谈 React Native 中的手势

    http://gold.xitu.io/entry/55fa202960b28497519db23f React-Native是一款由Facebook开发并开源的框架,主要卖点是使用JavaScrip ...

  4. 谈谈react hooks的优缺点

    前言Hook 是 React 16.8 的新增特性.它是完全可选的,并且100%向后兼容.它可以让你使用函数组件的方式,运用类组件以及 react 其他的一些特性,比如管理状态.生命周期钩子等.从概念 ...

  5. React Native初探

    前言 很久之前就想研究React Native了,但是一直没有落地的机会,我一直认为一个技术要有落地的场景才有研究的意义,刚好最近迎来了新的APP,在可控的范围内,我们可以在上面做任何想做的事情. P ...

  6. 浅谈React受控与非受控组件

    背景 React内部分别使用了props, state来区分组件的属性和状态.props用来定义组件外部传进来的属性, 属于那种经过外部定义之后, 组件内部就无法改变.而state维持组件内部的状态更 ...

  7. [转] React风格的企业前端技术

    亲爱的各位朋友们,大家下午好! 首先祝大家国庆节快乐! 很高兴可以在国庆前夕,可以为大家分享一下React风格的企业前端技术. 谈到前端,可能以前大家的第一感觉就是,前端嘛,无非就是做做页面切图,顶多 ...

  8. React JS和React-Native学习指南

    自己在学习React-Native过程中整理的一份学习指南,包含 教程.开源app和资源网站等,还在不断更新中.欢迎pull requests! React-Native学习指南本指南汇集React- ...

  9. 【优质】React的学习资源

    React的学习资源 github 地址: https://github.com/LeuisKen/react-collection https://github.com/reactnativecn/ ...

随机推荐

  1. CSS float 浮动属性

    本篇主要介绍float属性:定义元素朝哪个方向浮动. 目录: 1. 页面布局方式:介绍文档流.浮动层以及float属性. 2. float:left :介绍float为 left 时的布局方式. 3. ...

  2. Xamarin+Prism开发详解五:页面布局基础知识

    说实在的研究Xamarin到现在,自己就没设计出一款好的UI,基本都在研究后台逻辑之类的!作为Xamarin爱好者,一些简单的页面布局知识还是必备的. 布局常见标签: StackLayout Abso ...

  3. 玩转spring boot——MVC应用

    如何快速搭建一个MCV程序? 参照spring官方例子:https://spring.io/guides/gs/serving-web-content/ 一.spring mvc结合thymeleaf ...

  4. Asp.Net WebApi核心对象解析(上篇)

    生活需要自己慢慢去体验和思考,对于知识也是如此.匆匆忙忙的生活,让人不知道自己一天到晚都在干些什么,似乎每天都在忙,但又好似不知道自己到底在忙些什么.不过也无所谓,只要我们知道最后想要什么就行.不管怎 ...

  5. 微信小程序前端源码逻辑和工作流

    看完微信小程序的前端代码真的让我热血沸腾啊,代码逻辑和设计一目了然,没有多余的东西,真的是大道至简. 废话不多说,直接分析前端代码.个人观点,难免有疏漏,仅供参考. 文件基本结构: 先看入口app.j ...

  6. 调用微信退款接口或发红包接口时出现System.Security.Cryptography.CryptographicException: 出现了内部错误 解决办法

    我总结了一下出现证书无法加载的原因有以下三个 1.证书密码不正确,微信证书密码就是商户号 解决办法:请检查证书密码是不是和商户号一致 2.IIS设置错误,未加载用户配置文件 解决办法:找到网站使用的应 ...

  7. iOS开发 适配iOS10

    2016年9月7日,苹果发布iOS 10.2016年9月14日,全新的操作系统iOS 10将正式上线. 作为开发者,如何适配iOS10呢? 1.Notification(通知) 自从Notificat ...

  8. Oracle 分页

    --1:无ORDER BY排序的写法.(效率最高) --(经过测试,此方法成本最低,只嵌套一层,速度最快!即使查询的数据量再大,也几乎不受影响,速度依然!) SELECT * FROM (SELECT ...

  9. 编写简单的Makefile文件

    makefile中的编写内容如下: www:hello.c x.h gcc hello.c -o hello clean: rm hello www:hello.c  x.h 表示生成www这个文件需 ...

  10. 基于Node.js实现一个小小的爬虫

    以前一直听说有爬虫这种东西,稍微看了看资料,貌似不是太复杂. 正好了解过node.js,那就基于它来个简单的爬虫. 1.本次爬虫目标: 从拉钩招聘网站中找出“前端开发”这一类岗位的信息,并作相应页面分 ...