| 
                         将原组件的状态提取到HOC中进行管理,如下面的代码,我们将Input的value提取到HOC中进行管理,使它变成受控组件,同时不影响它使用onChange方法进行一些其他操作。基于这种方式,我们可以实现一个简单的双向绑定,具体请看双向绑定。 
通过属性代理实现 
- function proxyHoc(WrappedComponent) {  
 -   return class extends Component {  
 -     constructor(props) {  
 -       super(props);  
 -       this.state = { value: '' };  
 -     }  
 -     onChange = (event) => {  
 -       const { onChange } = this.props;  
 -       this.setState({  
 -         value: event.target.value,  
 -       }, () => {  
 -         if(typeof onChange ==='function'){  
 -           onChange(event);  
 -         }  
 -       })  
 -     }  
 -     render() {  
 -       const newProps = {  
 -         value: this.state.value,  
 -         onChange: this.onChange,  
 -       }  
 -       return <WrappedComponent {...this.props} {...newProps} />;  
 -     }  
 -   }  
 - }  
 - class HOC extends Component {  
 -   render() {  
 -     return <input {...this.props}></input>  
 -   }  
 - }  
 - export default proxyHoc(HOC); 
 
  
操作state 
上面的例子通过属性代理利用HOC的state对原组件进行了一定的增强,但并不能直接控制原组件的state,而通过反向继承,我们可以直接操作原组件的state。但是并不推荐直接修改或添加原组件的state,因为这样有可能和组件内部的操作构成冲突。 
通过反向继承实现 
- function debugHOC(WrappedComponent) {  
 -   return class extends WrappedComponent {  
 -     render() {  
 -       console.log('props', this.props);  
 -       console.log('state', this.state);  
 -       return (  
 -         <div className="debuging">  
 -           {super.render()}  
 -         </div>  
 -       )  
 -     }  
 -   }  
 - } 
 
  
上面的HOC在render中将props和state打印出来,可以用作调试阶段,当然你可以在里面写更多的调试代码。想象一下,只需要在我们想要调试的组件上加上@debug就可以对该组件进行调试,而不需要在每次调试的时候写很多冗余代码。(如果你还不知道怎么使用HOC,请👇如何使用HOC) 
渲染劫持 
高阶组件可以在render函数中做非常多的操作,从而控制原组件的渲染输出。只要改变了原组件的渲染,我们都将它称之为一种渲染劫持。 
实际上,上面的组合渲染和条件渲染都是渲染劫持的一种,通过反向继承,不仅可以实现以上两点,还可直接增强由原组件render函数产生的React元素。                         (编辑:我爱故事小小网_铜陵站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |