高阶组件

高阶组件

  • 高阶组件就是一个函数,传给它一个组件,它返回一个新的组件
  • 高阶组件的作用其实就是为了组件之间的代码复用

日志组件

import React, { Component } from 'react';
import ReactDOM from 'react-dom';
class Hello extends Component {
    render() {
        return <div>hello</div>
    }
}
function Logger(OldComponent: React.ComponentClass) {
    return class LoggerComponent extends Component {
        start;
        componentWillMount() {
            this.start = Date.now();
        }
        componentDidMount() {
            console.log(`组件渲染完成一共花了${Date.now() - this.start}ms`);
        }
        render() {
            return <OldComponent></OldComponent>
        }
    }
}
const LoggerHello = Logger(Hello);
ReactDOM.render(
    <LoggerHello />,
    document.getElementById('root')
)

多层高阶组件

  • 从localStorage中加载
  • 从ajax中加载
import React, { Component } from 'react';
import ReactDOM from 'react-dom';


interface Props {
    value: string
}
function fromLocal(AjaxComponent: React.FC<Props> | React.ComponentClass<Props>) {
    return class FromLocal extends Component<Props> {
        render() {
            return <AjaxComponent value={localStorage.getItem(this.props.value)} />
        }
    }
}
function fromAjax(ShowComponent: React.FC<Props> | React.ComponentClass<Props>) {
    return class FromAjax extends Component<Props> {
        state = {
            value: ''
        }
        componentDidMount() {
            fetch('/user.json').then(response => response.json()).then(res => {
                this.setState({
                    value: res[this.props.value]
                })
            })
        }
        render() {
            return <ShowComponent value={this.state.value} />
        }
    }
}
const ShowComponent: React.FC<Props> = (props: Props): React.ReactElement => {
    return <p>{props.value}</p>
}
let FromLocalAjaxcomponent = fromLocal(fromAjax(ShowComponent));
ReactDOM.render(
    <FromLocalAjaxcomponent value="username" />,
    document.getElementById('root')
)
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 根据胡子大哈的文章学习,感谢大胡分享胡子大哈-高阶组件、context 高阶组件 什么是高阶组件 高阶组件就是一个...
    布蕾布蕾阅读 2,612评论 0 4
  • 探索Vue高阶组件 高阶组件(HOC)是 React 生态系统的常用词汇,React 中代码复用的主要方式就是使用...
    君惜丶阅读 1,044评论 0 2
  • 探索Vue高阶组件高阶组件(HOC)是 React 生态系统的常用词汇,React 中代码复用的主要方式就是使用高...
    videring阅读 10,700评论 5 30
  • 高阶组件(Higher-Order Components) http://huziketang.mangojuic...
    shelhuang阅读 353评论 0 0
  • 你在我身旁 眼里盛满鲜艳的阳光 仿佛滴水的声音 这一刻 在心间敲出印痕 是鲜花绽放的香气 令我走进从前的你 桃花依...
    江南奕帆阅读 264评论 0 1

友情链接更多精彩内容