react学习-小册

# HOC

HOC 常用用途及场景

  • 强化props 追加额外的props 如 react-router 的 withRoute
  • 渲染劫持 无数据追加暂无数据 或 为组件渲染增加loading效果
  • 配合import 实现动态加载组件 并带有loading 效果
  • 通过ref 获取组件实例, 操作实例下的属性或方法, 监听组件的时间触发, 统一追加防抖节流等效果
  • 对永远是组件做一些事件监听, 错误监控等

HOC 注意事项

  • 谨慎修改原型链
  • 不要在函数组件内部或类组件render函数中使用HOC
// render diff 无法复用合理的DOM节点 造成性能的浪费
class Index extends Component {
  render() {
    const WrapHome = HOC(Home)
    return <WrapHome />
  }
}
function Index() {
  const WrapHome = HOC(Home)
  return <WrapHome />
}
  • class 声明的类组件 可以使用ES6的装饰器对组件进行赋能
// 注意HOC嵌套顺序问题 HOC 的依赖关系
@HOC1(styles)
@HOC2
@HOC3
class Index extends Component {

}

function Index() {

}
export default HOC1(styles)(HOC2(HOC3(Index)))
  • HOC本质上是返回了一个新的component, 如果原来的component含有一些静态属性或方法 注意需copy到HOC上否则会导致静态属性或方法的丢失
function Hoc(component) {
  class WrappedComponent extends component {

  }
  // 是否可以使用Object.keys 动态copy 员组件上的静态属性或方法 参见 hoist-non-react-statics 的实现
  wrappedComponent.staticMethod = Component.staticMethods
  return WrappedComponent
}
上次更新: 2022/11/04, 15:50:34
最近更新
01
在js中实现响应式(原理参考solidjs)
03-21
02
使用VSCode插件快速导航代码库:类似autojump的跳转功能
03-20
03
react事件系统
11-07
更多文章>