react的目的是将前端页面组件化,用状态机的思维模式去控制组件。组件和组件之间肯定是有关系得,通过合理得组件设计,给每一个组件划定合适得边界,可以有效降低当我们对页面进行重构时对其他组件之间得影响。同时也可以使我们得代码更加美观。

1、高耦合低内聚。

高耦合:将功能联系紧密得部分放到一个容器组件内对外暴漏出index.js,目录结构如下:

├── components

│ └── App

└── index.js

低内聚:当这个组件在调用页面直接删除时,不会触发任何影响;减少无必要的重复渲染;减小重复渲染时影响得范围。

2、展示组件和容器组件

展示组件

容器组件

关注事物的展示

关注事物如何工作

可能包含展示和容器组件,并且一般会有DOM标签和css样式

可能包含展示和容器组件,并且不会有DOM标签和css样式

常常允许通过this.props.children传递

提供数据和行为给容器组件或者展示组件

对第三方没有任何依赖,比如store 或者 flux action

调用flux action 并且提供他们的回调给展示组件

不要指定数据如何加载和变化

作为数据源,通常采用较高阶的组件,而不是自己写,比如React Redux的connect(), Relay的createContainer(), Flux Utils的Container.create()

很少有自己的状态,即使有,也是自己的UI状态

这里重点说下this.props.children。通过this.props.children我们很容易让我们得组件变的低内聚。在实际开发中往往会遇到用纯组件写得展示组件下还有要继续跟跟数据打交道得容器组件。这里就用this.props.children套上这些容器组件就可以了。然后被套得容器组件可以继续按照上面得规则新建个文件夹暴漏出index.js这种写法。

这种写法得最大好处是你很快就能找到你写得这个组件是在哪,是干嘛得,影响了哪。

3、从顶部向下得单向数据流

当我们得设计满足上面这些条件时,使用从顶部向下的单向数据流会让我们在使用一些类似于redux这种得状态管理工具时,影响的范围更加可控,再通过shouldComponentUpdate来减少不必要的渲染。(不过这么写确实挺麻烦的,但是react从 v16.3开始使用新的生命周期函数getDerivedStateFromProps来强制开发者对这一步进行优化)

4、受控组件和非受控组件

有许多的web组件可以被用户的交互发生改变,比如:,。这些组件可以通过输入一些内容或者设置元素的value属性来改变组件的值。但是,因为React是单向数据流绑定的,这些组件可能会变得失控:

1.一个维护它自己state里的value值的组件无法从外部被修改

2.一个通过props来设置value值的组件只能通过外部控制来更新。

受控组件:

一个受控的应该有一个value属性。渲染一个受控的组件会展示出value属性的值。

一个受控的组件不会维护它自己内部的状态,组件的渲染单纯的依赖于props。也就是说,如果我们有一个通过props来设置value的组件,不管你如何输入,它都只会显示props.value。换句话说,你的组件是只读的。

在处理一个受控组件的时候,应该始终传一个value属性进去,并且注册一个onChange的回调函数让组件变得可变。

非受控组件:

一个没有value属性的就是一个非受控组件。通过渲染的元素,任意的用户输入都会被立即反映出来。非受控的只能通过OnChange函数来向上层通知自己被用户输入的更改。

#### 混合组件:

同时维护props.value和state.value的值。props.value在展示上拥有更高的优先级,state.value代表着组件真正的值。

5、使用高阶组件(HOC)

简单定义:一个接收react组件作为参数返回另外一个组件的函数。

可以做什么:代码复用,代码模块化增删改props

使用案例:比方说公司突然要给前端代码不同的点击埋点,就可以使用hoc包一层,再不改动原来各处代码得同时进行了合理得改动。

6、增删改查标准流程

增:填写数据,验证数据,插入数据,重新查询数据列表。

删:确认删除,重新查询数据列表。

查:查询数据列表,分页显示

改:填写数据,验证数据,修改数据,重新查询数据列表

其实设计组件时没必要过早的组件化。我们可以先快速的写出一个版本,然后再根据实际设计拆分以应对项目初期的需求快速变更。然后一点一点的按照设计模式去改变我们的项目,只要设计模式合理拆分其实是一个很流畅和自然的事情。

react组件设计原则_React组件设计规则相关推荐

  1. 面向对象的设计原则-类设计原则

    面向对象的设计原则-类设计原则 排行榜 收藏 打印 发给朋友 举报发布者:七月十五 热度票  浏览1368次 [共4条评论][我要评论]时间:2008年11月08日 10:55 在面向对象设计中,如何 ...

  2. vue学习-v-if v-for优先级、data、key、diff算法、vue组件化、vue设计原则、组件模板只有一个根元素、MVC.MVP,MVVM

    1:v-if和v-for哪个优先级更高?如果两个同时出现,应该怎么优化得到更好的性能? //在vue页面中 同时使用v-for与v-if后,打印渲染函数. console.log(app.$optio ...

  3. react 组件连动效果_React组件开发中常见的陷阱

    React作为使用最广泛Web前端开发之一,在Web开发领域越来成熟和稳固.其新版本发布的Hook API/concept使得组件更加便捷易用.虽然如此,React开发中仍然有很多的陷阱值得每一位Re ...

  4. react 中组件隐藏显示_React组件开发中常见的陷阱及解决

    React作为使用最广泛Web前端开发之一,在Web开发领域越来成熟和稳固.其新版本发布的Hook API/concept使得组件更加便捷易用.虽然如此,React开发中仍然有很多的陷阱值得每一位Re ...

  5. 浅谈系统架构设计-从架构设计原理、架构设计原则、架构设计方法展开

    我们工作中一直强调要做架构设计.系分,最近前端同学在追求前端质量提升的时候,也在进行架构设计.前端系分的推广,那到底什么是架构设计和系分?该怎么做架构设计和系分?本文尝试对架构设计进行全面的介绍和分享 ...

  6. 代码设计的基础原则_设计原则:良好设计的基础

    代码设计的基础原则 As designers, it's our goal to pass information in the most pleasing way possible. Startin ...

  7. mysql数据库设计原则_mysql数据库设计总结

    作者:腾讯云技术社区 链接:https://www.zhihu.com/question/19719997/answer/154809252 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权, ...

  8. solid 设计原则 php,面向对象设计SOLID五大原则

    今天我给大家带来的是面向对象设计SOLID五大原则的经典解说. 我们知道,面向对象对于设计出高扩展性.高复用性.高可维护性的软件起到很大的作用.我们常说的SOLID五大设计原则指的就是: S = 单一 ...

  9. 图标设计原则_图标设计的7个原则

    图标设计原则 重点 (Top highlight) More in the iconography series:• Foundations of Iconography• 5 Ways to Cre ...

最新文章

  1. Java Web - EL表达式和JSTL标签库
  2. java处理excel(java使用Apache POI处理Excel)
  3. 20应用统计考研复试要点(part17)--概率论与数理统计
  4. .NET中的设计模式---由吃龙虾想到的
  5. 64位BASM学习随笔(一)
  6. 视觉模型精度如何更上一层楼?百度技术专家实战演示调参技巧
  7. 模仿QZONE挂图效果
  8. 区块链入门视频?国外视频帮你快速入门了解区块链!!!
  9. 魅族e升级android,魅族魅蓝E升级教程_魅族魅蓝E的OTA系统升级方法
  10. 计算机里面的wps如何删除,如何快速删除电脑上的wps的所有换行符
  11. python多项式拟合_python中的多元(多项式)最佳拟合曲线?
  12. English Grammar(二)
  13. Python调用Rasa API服务进行连续对话
  14. python调用系统软键盘_python库 pywinio虚拟键盘使用
  15. 查看phpinfo方法
  16. 鸢尾花(iris)数据集保存到本地以及sklearn其他数据集下载保存
  17. double scanf输入时用%lf而printf用%f或%lf原理
  18. Markdown语法大全(超级版)
  19. git commit 遇到 “#modified: xxx/xxx (modified content)”问题的解决
  20. 无创血糖检测技术研究进展

热门文章

  1. HashMap之三问为什么及性能问题
  2. pyspark union代码示例
  3. CDH6.3.2界面配置hbase-site.xml的方法
  4. k8s 通用的java项目迁移流程
  5. docker run常用参数说明
  6. 富满电子鸿蒙系统,电子行业周报:HARMONYOS+2.0助力AIOT生态体系发展
  7. ftp linux 开启验证_在linux中开启ftp服务
  8. QML控件拖动并靠边停留
  9. B/S和C/S的区别
  10. 为什么IEE754标准中,32位浮点数的指数转换为阶码时需要加上数值为127的偏移量?