likes
comments
collection
share

《深入理解React组件:设计原则与最佳实践》

作者站长头像
站长
· 阅读数 44

前言

最近正在学习React,越学越惊叹于官方团队对React的设计,并且越用越觉得好用,它真的不愧于其名,真真实实的“反应”。在学习组件的过程中,我吸纳了各方的观点,总结了一些有用的特点和规则,下面给大家分享一下。

创建新组件的原则

如果你不确定你想要的组件的具体模样,那么建议你将其做成一个较大的组件,然后根据需要将其拆分为较小的组件。

如果可以确定这个组件需要复用,则直接拆分。但在初期阶段,不需要过多关注组件的复用性和复杂性。

当你不确定是否需要一个新组件时,可以参考以下原则:

  1. 内容/布局的逻辑分离

    • 组件是否包含不属于同一逻辑的内容或布局?
  2. 可复用性

    • 组件的某些部分是否可以复用?
    • 是否需要复用这些部分?
  3. 职责/复杂性

    • 组件是否承担过多不同的任务?
    • 组件是否依赖过多的属性(props)?
    • 组件是否有过多的状态和/或副作用?
    • 代码,包括JSX,是否过于复杂/混乱?
  4. 个人编码风格

    • 你是否更喜欢小型函数/组件?

组件类别

大多数组件分为三类:

  1. 无状态组件 (Stateless/Presentational Components)

    • 没有状态
    • 可以接收props并简单地展示接收到的数据或其他内容
    • 通常小并且可复用
  2. 有状态组件 (Stateful Components)

    • 有状态
    • 仍然可以复用
  3. 结构组件 (Structural Components)

    • 应用程序的页面 (Pages)布局 (Layouts)屏幕 (Screens)
    • 由**组合 (Composition)**生成
    • 可以是巨大且不可复用的(但不一定)

什么是组件组合?

组件组合是通过使用children属性(或明确定义的props)组合不同的组件。

组件组合示例:

  • 单纯使用组件
function Modal() {
  return (
    <div className="modal">
      <Success />
    </div>
  );
}

function Success() {
  return <p>成功!</p>;
}

在这个例子中,ModalSuccess组合成了一个固定的组件,复用性非常低。

  • 组件组合
function Modal({ children }) {
  return <div className="modal">{children}</div>;
}

<Modal>
  <Success />
</Modal>

<Modal>
  <Error />
</Modal>

通过利用children props,我们可以组合出不同的组件,使其复用性大大提高。

这样组件不需要预先知道它们的子组件

通过组件组合,我们可以:

  1. 创建高度复用和灵活的组件
  2. 解决props传递问题(适用于布局)

props作为API

组件是一个抽象层,它封装了UI和逻辑。这使得使用组件的人可以专注于配置组件,而不需要了解组件内部的具体实现细节。作为组件的开发者,我们负责定义组件的结构、样式和行为,并通过props暴露组件的配置选项。因此,在构建组件时,我们需要通过props对组件的行为和显示进行配置和控制,以便于组件使用者的使用。

那么该怎么去定义具体的props呢?如果一个组件高度配置化,可以有成百上千个props,例如组件的颜色、字体大小、背景颜色、组件内的布局位置等等。所以我们需要找到在太少和太多props之间的平衡,以适应使用者和开发者的需求。

定义props的平衡点:

  • 太少的props

    • 不够灵活
    • 可能不太实用
  • 太多的props

    • 难使用
    • 暴露太多复杂性
    • 难写的代码
    • 提供好的默认值

通过合理定义和使用props,可以创建出既灵活又实用的组件,提高组件的可复用性和易用性。


希望这些原则和示例能对大家在学习和使用React组件时有所帮助。React的组件化思想不仅提高了开发效率,也使得代码更加模块化和易维护。继续探索React的世界,相信你会发现更多有趣和实用的设计模式和最佳实践。

转载自:https://juejin.cn/post/7390663832781914153
评论
请登录