浅析 React 高阶组件 HOC
高阶组件是什么
- 高阶组件其实就是一个函数,传入一个组件返回一个新的组件。它接受一个组件作为参数,返回一个新的组件。这个新的组件会使用你传给它的组件作为子组件
- 高阶组件的作用其实不言而喻,其实就是为了组件之间的代码复用。组件可能有着某些相同的逻辑,把这些逻辑抽离出来,放到高阶组件中进行复用。高阶组件内部的包装组件和被包装组件之间通过 props 传递数据
如何实现高阶组件
高阶组件其实就是处理 react 组件的函数。那么我们如何实现一个高阶组件?有两种方法
属性代理
属性代理是最常见的实现方式,将被处理组件的 props 和新的 props 一起传递给新组件
export default function withHeader(WrappedComponent) { return class HOC extends Component { render() { return <div> <div className="demo-header"> 我是标题 </div> <WrappedComponent {...this.props}/> </div> } } }
在其他组件里,我们引用这个高阶组件,用来强化它
@withHeader export default class Demo extends Component { render() { return ( <div> 我是一个普通组件 </div> ); } }
使用 ES6 写法可以更加简洁
export default(title) => (WrappedComponent) => class HOC extends Component { render() { return <div> <div className="demo-header"> {title ? title : '我是标题'} </div> <WrappedComponent {...this.props}/> </div> } }
从代码中看,就是使用 HOC 这个函数,向被处理的组件 WrappedComponent 上面添加一些属性,并返回一个包含原组件的新组件
反向继承
function HOC(WrappedComponent){ return class HOC extends WrappedComponent { //继承了传入的组件 test1(){ return this.test2() + 5; } componentDidMount(){ console.log('1'); this.setState({number:2}); } render(){ //使用 super 调用传入组件的 render 方法 return super.render(); } } } @HOC class OriginComponent extends Component { constructor(props){ super(props); this.state = {number:1} } test2(){ return 4; } componentDidMount(){ console.log('2'); } render(){ return ( <div> {this.state.number}{'and'} {this.test1()} 这是原始组件 </div> ) } } //const newComponent = HOC(OriginComponent)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: React 之 context
下一篇: 彻底找到 Tomcat 启动速度慢的元凶
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论