热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

合理设计React组件,使代码更美观!!

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

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组件可以被用户的交互发生改变,比如:组件无法从外部被修改
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组件,使代码更美观!!的详细内容,更多请关注其它相关文章!


推荐阅读
  • EasyMock实战指南
    本文介绍了如何使用EasyMock进行单元测试,特别是当测试对象的合作者依赖于外部资源或尚未实现时。通过具体的示例,展示了EasyMock在模拟对象行为方面的强大功能。 ... [详细]
  • 本文深入探讨了JavaScript中实现继承的四种常见方法,包括原型链继承、构造函数继承、组合继承和寄生组合继承。对于正在学习或从事Web前端开发的技术人员来说,理解这些继承模式对于提高代码质量和维护性至关重要。 ... [详细]
  • 本文详细介绍了在使用Socket进行网络编程时,遇到链接器错误`undefined reference to WSAStartup@8`的解决方案,适用于多种开发环境。 ... [详细]
  • python开发mysql:单表查询&多表查询
    一单表查询,以下是表内容二多表查询,一下是表内容三总结&表创建过程单 ... [详细]
  • 本文探讨了如何通过WebBrowser控件在用户点击输入框时自动显示图片验证码。该过程可能涉及JavaScript事件的触发与响应。 ... [详细]
  • MacOS 重装指南
    本文详细介绍了如何通过U盘启动并重新安装MacOS,包括遇到安装问题时的解决方案。 ... [详细]
  • 如何恢复CAD中意外丢失的图纸数据
    当使用CAD进行绘图时,因突然断电或其他原因导致计算机关闭可能会造成工作数据的丢失。然而,通过利用CAD软件的自动保存功能,用户通常能够恢复至最近一次自动保存的数据状态。 ... [详细]
  • 本文深入探讨 PHPCMS 平台中的字符串截取函数 str_cut 的使用方法,该函数常用于控制输出的标题或内容摘要长度,有效避免因过长的文本导致的页面布局问题。通过本文,读者将掌握如何灵活运用此函数,包括处理 HTML 标签等高级技巧。 ... [详细]
  • 探讨HTML中的DIV样式难题
    本文深入分析了HTML中常见的DIV样式问题,并提供了有效的解决策略。适合所有对Web前端开发感兴趣的读者。 ... [详细]
  • 在使用Maven进行项目构建时,由于依赖库的下载速度慢常常让人感到沮丧,这直接影响了开发效率和学习热情。幸运的是,阿里云提供了一个快速的国内镜像服务,能够显著提升Maven项目的构建速度。 ... [详细]
  • 本文探讨了为何需要进行详尽的需求分析,以及在软件开发过程中常见的需求类型。同时,介绍了几种有效的方法来确保能够准确地捕捉到用户的实际需求。 ... [详细]
  • JavaWeb技术架构解析
    本文探讨了JavaWeb开发中客户端与服务器端的交互模式,重点分析了B/S(浏览器/服务器)和C/S(客户端/服务器)两种架构的特点及应用场景。 ... [详细]
  • Vue 3.0 翻牌数字组件使用指南
    本文详细介绍了如何在 Vue 3.0 中使用翻牌数字组件,包括其基本设置和高级配置,旨在帮助开发者快速掌握并应用这一动态视觉效果。 ... [详细]
  • 深入理解Python编程
    本文探讨了作者在学习Python过程中遇到的挑战和转折点,以及如何通过找到合适的资源和方法来提升编程技能。对于初学者来说,这不仅是一个学习的过程,也是一个自我发现和调整学习策略的过程。 ... [详细]
  • 本文介绍了如何使用JavaScript和jQuery实现页面元素随着滚动条的移动而相应变化位置的功能,提供了一段简洁的代码示例。 ... [详细]
author-avatar
isbool
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有