加入收藏 | 设为首页 | 会员中心 | 我要投稿 西安站长网 (https://www.029zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

【React深入】从Mixin到HOC再到Hook

发布时间:2019-04-13 02:38:42 所属栏目:建站 来源:ConardLi
导读:副标题#e# 导读 前端发展速度非常之快,页面和组件变得越来越复杂,如何更好的实现状态逻辑复用一直都是应用程序中重要的一部分,这直接关系着应用程序的质量以及维护的难易程度。 本文介绍了React采用的三种实现状态逻辑复用的技术,并分析了他们的实现原

还可以结合上面的compose函数使用:

  1. const hoc = compose(logger, visible, style);  
  2. @hoc  
  3. class Input extends Component {  
  4.   // ...  

HOC的实际应用

下面是一些我在生产环境中实际对HOC的实际应用场景,由于文章篇幅原因,代码经过很多简化,如有问题欢迎在评论区指出:

日志打点

实际上这属于一类最常见的应用,多个组件拥有类似的逻辑,我们要对重复的逻辑进行复用,

官方文档中CommentList的示例也是解决了代码复用问题,写的很详细,有兴趣可以👇使用高阶组件(HOC)解决横切关注点。

某些页面需要记录用户行为,性能指标等等,通过高阶组件做这些事情可以省去很多重复代码。

  1. function logHoc(WrappedComponent) {  
  2.   return class extends Component {  
  3.     componentWillMount() {  
  4.       this.start = Date.now();  
  5.     }  
  6.     componentDidMount() {  
  7.       this.end = Date.now();  
  8.       console.log(`${WrappedComponent.dispalyName} 渲染时间:${this.end - this.start} ms`);  
  9.       console.log(`${user}进入${WrappedComponent.dispalyName}`);  
  10.     }  
  11.     componentWillUnmount() {  
  12.       console.log(`${user}退出${WrappedComponent.dispalyName}`);  
  13.     }  
  14.     render() {  
  15.       return <WrappedComponent {...this.props} />  
  16.     }  
  17.   }  

可用、权限控制

  1. function auth(WrappedComponent) {  
  2.   return class extends Component {  
  3.     render() {  
  4.       const { visible, auth, display = null, ...props } = this.props;  
  5.       if (visible === false || (auth && authList.indexOf(auth) === -1)) {  
  6.         return display  
  7.       }  
  8.       return <WrappedComponent {...props} />;  
  9.     }  
  10.   }  

authList是我们在进入程序时向后端请求的所有权限列表,当组件所需要的权限不列表中,或者设置的

visible是false,我们将其显示为传入的组件样式,或者null。我们可以将任何需要进行权限校验的组件应用HOC:

  1. @auth  
  2. class Input extends Component {  ...  }  
  3. @auth  
  4. class Button extends Component {  ...  }  
  5. <Button auth="user/addUser">添加用户</Button>  
  6. <Input auth="user/search" visible={false} >添加用户</Input> 

双向绑定

在vue中,绑定一个变量后可实现双向数据绑定,即表单中的值改变后绑定的变量也会自动改变。而React中没有做这样的处理,在默认情况下,表单元素都是非受控组件。给表单元素绑定一个状态后,往往需要手动书写onChange方法来将其改写为受控组件,在表单元素非常多的情况下这些重复操作是非常痛苦的。

我们可以借助高阶组件来实现一个简单的双向绑定,代码略长,可以结合下面的思维导图进行理解。

(编辑:西安站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读