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

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

发布时间:2019-04-12 03:57:26 所属栏目:建站 来源:ConardLi
导读:导读 前端成长速率很是之快,页面和组件变得越来越伟大,怎样更好的实近况态逻辑复用一向都是应用措施中重要的一部门,这直接相关着应用措施的质量以及维护的难易水平。 本文先容了React回收的三种实近况态逻辑复用的技能,并说明白他们的实现道理、行使方

通过反向担任实现

  1. function styleHOC(WrappedComponent) {  
  2.   return class extends WrappedComponent {  
  3.     render() {  
  4.       return <div>  
  5.         <div className="title">{this.props.title}</div>  
  6.         {super.render()}  
  7.       </div>  
  8.     }  
  9.   }  

前提渲染

按照特定的属性抉择原组件是否渲染

通过属性署理实现

  1. function visibleHOC(WrappedComponent) {  
  2.   return class extends Component {  
  3.     render() {  
  4.       if (this.props.visible === false) return null;  
  5.       return <WrappedComponent {...props} />;  
  6.     }  
  7.   }  

通过反向担任实现

  1. function visibleHOC(WrappedComponent) {  
  2.   return class extends WrappedComponent {  
  3.     render() {  
  4.       if (this.props.visible === false) {  
  5.         return null  
  6.       } else {  
  7.         return super.render()  
  8.       }  
  9.     }  
  10.   }  

操纵props

可以对传入组件的props举办增进、修改、删除可能按照特定的props举办非凡的操纵。

通过属性署理实现

  1. function proxyHOC(WrappedComponent) {  
  2.   return class extends Component {  
  3.     render() {  
  4.       const newProps = {  
  5.         ...this.props,  
  6.         user: 'ConardLi'  
  7.       }  
  8.       return <WrappedComponent {...newProps} />;  
  9.     }  
  10.   }  

获取refs

高阶组件中可获取原组件的ref,通过ref获取组件气力,如下面的代码,当措施初始化完成后挪用原组件的log要领。(不知道refs怎么用,请👇Refs & DOM)

通过属性署理实现

  1. function refHOC(WrappedComponent) {  
  2.   return class extends Component {  
  3.     componentDidMount() {  
  4.       this.wapperRef.log()  
  5.     }  
  6.     render() {  
  7.       return <WrappedComponent {...this.props} ref={ref => { this.wapperRef = ref }} />;  
  8.     }  
  9.   }  

这里留意:挪用高阶组件的时辰并不能获取到原组件的真实ref,必要手动举办转达,详细请看转达refs

状态打点

(编辑:湖南网)

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

热点阅读