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

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

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

将原组件的状态提取到HOC中进行管理,如下面的代码,我们将Input的value提取到HOC中进行管理,使它变成受控组件,同时不影响它使用onChange方法进行一些其他操作。基于这种方式,我们可以实现一个简单的双向绑定,具体请看双向绑定。

通过属性代理实现

  1. function proxyHoc(WrappedComponent) {  
  2.   return class extends Component {  
  3.     constructor(props) {  
  4.       super(props);  
  5.       this.state = { value: '' };  
  6.     }  
  7.     onChange = (event) => {  
  8.       const { onChange } = this.props;  
  9.       this.setState({  
  10.         value: event.target.value,  
  11.       }, () => {  
  12.         if(typeof onChange ==='function'){  
  13.           onChange(event);  
  14.         }  
  15.       })  
  16.     }  
  17.     render() {  
  18.       const newProps = {  
  19.         value: this.state.value,  
  20.         onChange: this.onChange,  
  21.       }  
  22.       return <WrappedComponent {...this.props} {...newProps} />;  
  23.     }  
  24.   }  
  25. }  
  26. class HOC extends Component {  
  27.   render() {  
  28.     return <input {...this.props}></input>  
  29.   }  
  30. }  
  31. export default proxyHoc(HOC); 

操作state

上面的例子通过属性代理利用HOC的state对原组件进行了一定的增强,但并不能直接控制原组件的state,而通过反向继承,我们可以直接操作原组件的state。但是并不推荐直接修改或添加原组件的state,因为这样有可能和组件内部的操作构成冲突。

通过反向继承实现

  1. function debugHOC(WrappedComponent) {  
  2.   return class extends WrappedComponent {  
  3.     render() {  
  4.       console.log('props', this.props);  
  5.       console.log('state', this.state);  
  6.       return (  
  7.         <div className="debuging">  
  8.           {super.render()}  
  9.         </div>  
  10.       )  
  11.     }  
  12.   }  

上面的HOC在render中将props和state打印出来,可以用作调试阶段,当然你可以在里面写更多的调试代码。想象一下,只需要在我们想要调试的组件上加上@debug就可以对该组件进行调试,而不需要在每次调试的时候写很多冗余代码。(如果你还不知道怎么使用HOC,请👇如何使用HOC)

渲染劫持

高阶组件可以在render函数中做非常多的操作,从而控制原组件的渲染输出。只要改变了原组件的渲染,我们都将它称之为一种渲染劫持。

实际上,上面的组合渲染和条件渲染都是渲染劫持的一种,通过反向继承,不仅可以实现以上两点,还可直接增强由原组件render函数产生的React元素。

(编辑:晋中站长网)

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

热点阅读