react的hoc

简单的讲,Higher-Order Components就是一个函数,传给它一个组件,它返回一个新的组件。

官网的定义:

组件(HOC)是 React 中用于复用组件逻辑的一种高级技巧。HOC 自身不是 React API 的一部分,它是一种基于 React 的组合特性而形成的设计模式。

具体而言,高阶组件是参数为组件,返回值为新组件的函数。

const EnhancedComponent = higherOrderComponent(WrappedComponent);

react 高阶组件的两种方式: 属性代理、反向继承

a. 高阶组件的反向继承:通过操作super.render():

import React from 'react'
import {
  render
} from 'react-dom'
 
//import App from './App4'
 
class ComponentChild extends React.Component {
  constructor(props) {
    super(props)
    this.state = {
      num: 2019
    }
  }
 
  componentDidMount() {
    console.log("child component Did Mount")
  }
  clickComponent() {
    console.log("Component click")
  }
 
  render() {
    return ( <div > {
        this.state.num
      } </div>
    )
  }
}
 
 
 
let iihoc = (WrapComponet) => class extends WrapComponet {
 
  constructor(props) {
 
      super(props)
 
      this.state = {
 
          num: 2000
 
      }
 
  }
 
  componentDidMount() {
 
      console.log('iihoc componentDidMount')
 
      this.clickComponent()
 
  }
render(){
  return (
 
    <div>
 
        <div onClick={this.clickComponent}>iiHoc 点击</div>
 
       {/* <div><WrapComponet /></div> */}//用的是父组件的state;
       <div>{super.render()}</div>//反向继承,用的是子组件的state;
    </div>
 
)
}
}
 
 
var App = iihoc(ComponentChild)
 
render( <App /> ,document.getElementById('root'))

b. 属性继承:

import React, { Component } from 'react';
 
const loading = info => Wrapcomponent => {
  return class loadings extends Component {
    render() {
      
      return (<div>
        <Wrapcomponent {...props} {...state} />
      </div>);
    }
  };
};
export default loading;

我们可以通过高阶组件来实现一个组件底部的共享版权信息添加

目录结构:

在这里插入图片描述
copyright.jsx

import React from 'react'
// 函数式组件内部返回一个class类型组件
const withCopyright = (InnerComponent)=>{
//注意这里的形参需要首字母大写,和普通组件一致
    return class newcom extends React.Component{
        render(){
            return(
                <>
                    <InnerComponent></InnerComponent>
                    <div>©底部共享版权信息</div>
                </>
            )
        }
    }
}
export default withCopyright
//将我们的HOC的函数式组件暴露出去

home.js

import React, { Component } from 'react'
import Copyright from './copyright'
//将hoc函数式组件引入

class home extends Component {
//定义一个类组件写入内容
    render() {
        return (
            <div>
                home页面内容
            </div>
        )
    }
}

export default Copyright(home)
//用函数式组件包裹类组件后暴露导出

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import Mycomponent from './HOC/home.jsx'
//引入home

ReactDOM.render(

  <Mycomponent/>,

  document.getElementById('root')
);

参考博客:

React 中高阶组件(HOC)用法简述

react 高阶组件的两种方式: 属性代理、反向继承

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值