前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
AI 面试
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
开发者导航
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
AI 面试
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
开发者导航

React设计模式和最佳实践总结

首页
2019-08-10 18:50:12
Front-End
JavaScriptreact

# 一、组件实践

# 1.1 设计原则

  • 保持接口小,props 数量要少
  • 根据数据边界来划分组件,充分利用组合
  • 把 state 往上层组件提取,让下层组件只需要实现为纯函数

# 1.2 组件划分

任何一个复杂组件都是从简单组件开始的,一开始我们在 render 函数里写的代码不多,但是随着逻辑的复杂,JSX 代码越来越多,于是,就需要拆分函数中的内容

  • 在 React 中,有一个误区,就是把 render 中的代码分拆到多个 renderXXXX 函数中去,比如下面这样
class StopWatch extends React.Component {
  render() {
    const majorClock = this.renderMajorClock();
    const controlButtons = this.renderControlButtons();
    const splitTimes = this.renderSplitTimes();
    
    return (
       <div>
          {majorClock}
          {controlButtons}
          {splitTimes}
       </div>
    );
  }
  
  renderMajorClock() {
     //TODO: 返回数字时钟的JSX
  }
  
  renderControlButtons() {
     //TODO: 返回两个按钮的JSX
  }
  
  renderSplitTimes() {
     //TODO: 返回所有计次时间的JSX
  }
}
@前端进阶之旅: 代码已经复制到剪贴板

用上面的方法组织代码,当然比写一个巨大的 render 函数要强,但是,实现这么多 renderXXXX 函数并不是一个明智之举,因为这些 renderXXXX 函数访问的是同样的 props 和 state,这样代码依然耦合在了一起。更好的方法,是把这些 renderXXXX 重构成各自独立的 React 组件,像下面这样

class StopWatch extends React.Component {
  render() {
    return (
       <div>
          <MajorClock>
          <ControlButtons>
          <SplitTimes>
       </div>
    );
  }
}

const MajorClock = (props) => {
  //TODO: 返回数字时钟的JSX
};

const ControlButtons = (props) => {
  //TODO: 返回两个按钮的JSX
};
  
const SplitTimes = (props) => {
  //TODO: 返回所有计次时间的JSX
}
@前端进阶之旅: 代码已经复制到剪贴板

我们创造了 MajorClock、ControlButtons 和 SplitTimes 这三个组件,目前,我们并不知道它们是否应该有自己的 state,但是从简单开始,首先假设它们没有自己的 state,定义为函数形式的无状态组件

组件 props 的设计

使用 propTypes 来定义组件的 props

const ControlButtons = (props) => {
  //fe
  • 一、组件实践
    • 1.1 设计原则
    • 1.2 组件划分
    • 1.3 组件内部实现
  • 二、组件设计模式
    • 2.1 高阶组件
    • render props 模式
    • 2.2 提供者模式
    • 2.3 组合组件
  • 三、React 单元测试
    • 3.1 测试的目的
  • 四、单元测试
  • 五、React 状态管理
    • 5.1 组件状态
    • 5.2 Mobx 使用模式
    • 5.3 不同方式对比
  • 六、React Router
  • 七、服务器端渲染
    • 7.1 基本套路
    • 7.2 理解 Next.js
  • 八、React 的未来(1): 拥抱异步渲染
  • 九、React 的未来(2):Suspense 带来的异步操作革命
  • 十、函数化的 Hooks

← 小程序蓝牙记录Ionic3与Ionic4变更对比 →