React为什么需要Hook

自从React 16.8发布Hook之后,笔者已经在实际项目中使用Hook快一年了,虽然Hook在使用中存在着一些坑,但是总的来说它是一个很好的功能,特别是在减少模板代码和提高代码复用率这些方面特别有用。为了让更多的人了解和使用Hook,我决定写一系列和Hook相关的文章,本篇文章就是这个系列的第一篇,主要和大家聊一下React为什么需要Hook

Hook解决的问题

Component非UI逻辑复用困难

对于React或者其它的基于Component的框架来说,页面是由一个个UI组件构成的。独立的组件可以在同一个项目中甚至不同项目中进行复用,这十分有利于前端开发效率的提高。可是除了UI层面上的复用,一些状态相关(stateful)或者副作用相关(side effect)的非UI逻辑在不同组件之间复用起来却十分困难。对于React来说,你可以使用高阶组件(High-order Component)或者renderProps的方法来复用这些逻辑,可是这两种方法都不是很好,存在各种各样的问题。如果你之前没有复用过这些非UI逻辑的话,我们可以先来看一个高阶组件的例子。

假如你在开发一个社交App的个人详情页,在这个页面中你需要获取并展示当前用户的在线状态,于是你写了一个叫做UserDetail的组件:

class UserDetail extends React.Component {
   
  state = {
   
    isOnline: false
  }

  handleUserStatusUpdate = (isOnline) => {
   
    this.setState({
    isOnline })
  }

  componentDidMount() {
   
    // 组件挂载的时候订阅用户的在线状态
    userService.subscribeUserStatus(this.props.userId, this.handleUserStatusUpdate)
  }

  componentDidUpdate(prevProps) {
   
    // 用户信息发生了变化
    if (prevProps.userId != this.props.userId) {
   
      // 取消上一个用户的状态订阅
      userService.unSubscribeUserStatus(this.props.userId, this.handleUserStatusUpdate)
      // 订阅下一个用户的状态
      userService.subscribeUserStatus(this.props.userId,<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值