React入门0x018: 高阶函数组件(HOC)

码林棱镜
• 阅读 1959

0x000 概述

高阶函数组件...还是一个函数,和函数组件不同的是他返回了一个完整的组件...他返回了一个class!!!

0x001 直接上栗子

  • 照常,先写个App组件,外部传入一个theme

    class App extends React.Component {
        render() {
            return (
                <div>
                    App theme: {this.props.theme}
                </div>
            );
        }
    }
  • 写一个函数,传入一个组件返回新的一个类组件,新的类组件渲染了传入的组件,并添加theme到传入的组件中

    const withTheme = (OriginComponent) => {
        return class WrappedComponent extends React.Component {
            render() {
                return (
                    <OriginComponent theme={'dark'}/>
                );
            }
        }
    }
  • 调用组件

    let ThemeApp = withTheme(App)
  • 渲染

    ReactDom.render(
        <ThemeApp/>,
    document.getElementById('app'))
  • 效果
    React入门0x018: 高阶函数组件(HOC)
  • 说明
    这个就是所为的HOC了,其实也没有啥,就是传入一个组件,返回另一个组件,但是这其中的作用可就大多了,返回的新的组件有自己的生命周期,并且可以操控传入组件的属性,react-reduxconnect实现方式就和这类似。

0x003 总结

其实,这个和React的思想有很大的渊源,React不推荐继承,而是推荐组合,而HOC就是其中的典范。比如我们写了两个个with*高阶组件,一个是withRedux,一个是withLocalstorage,组件就可以随意的在reduxlocaostorage之间随意切换,而不需要改动组件原有代码。

点赞
收藏
评论区
推荐文章
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Easter79 Easter79
3年前
sql:mysql:函数:TIMESTAMPDIFF函数实现TimeStamp字段相减,求得时间差
<divclass"htmledit\_views"id"content\_views"<p&nbsp;函数内指定是minute,则最终结果value值的单位是分钟,如果函数内指定为hours,则最终结果value值单位为小时。</p<preclass"has"name"code"<codeclass"hljssql"<
爱丽丝13 爱丽丝13
4年前
React 组件通信之发布订阅模式
React通信react的数据流是单向的,react通信有以下几种方式:父向子通信:传入props子向父通信:父组件向子组件传一个函数,然后通过这个函数的回调,拿到子组件传过来的值父向孙通信:利用context传值。React.createContext()兄弟间通信:​1、找一个相同的父组件,既可以用pr
爱丽丝13 爱丽丝13
4年前
快速了解 React Hooks 原理
为了保证的可读性,本文采用意译而非直译。我们大部分React类组件可以保存状态,而函数组件不能?并且类组件具有生命周期,而函数组件却不能?React早期版本,类组件可以通过继承PureComponent来优化一些不必要的渲染,相对于函数组件,React官网没有提供对应的方法来缓存函数组件以减少一些不必要的渲染,直接16.6出来的Rea
Souleigh ✨ Souleigh ✨
4年前
React Hooks 快速上手
ReactHook快速上手一、Hook简介1.1Hook历史在ReactHook出现之前的版本中,组件主要分为两种:函数式组件和类组件。其中,函数式组件通常只考虑负责UI的渲染,没有自身的状态也没有业务逻辑代码,是一个纯函数。而类组件则不同,类组件有自己的内部
Stella981 Stella981
3年前
Python进阶
python高阶函数可以接受函数作为参数的函数defadd(x,y,f):   returnf(x)f(y)由于参数想,x,y和f都可以任意传入,如果f传入其他函数,就可以得到不同的返回值map()函数它接收一个函数f和一个list,并通过把函数f依次作用在list的每
Stella981 Stella981
3年前
React.js 时间组件 + 组件生命周期(更新模拟)
React是用于构建用户界面的JavaScript库,React组件使用一个名为render()的方法,接收数据作为输入,输出页面中对应展示的内容。React除了可以使用外部传入的数据以外(通过this.props访问传入数据),组件还可以拥有其内部的状态数据(通过this.state访问状态数据)。当组件的状态
Stella981 Stella981
3年前
React 第一个小游戏(井字棋)知识关键点
1、React是一个声明式,高效且灵活的用于构建用户界面的JavaScript库通过使用组件来告诉React我们希望在屏幕上看到什么。当数据发生变化时,React会高效的更新并重新渲染我们的组件2、render返回了一个React元素,这是一种对渲染内容的轻量级描述。大多数的React开发者使用了一种名为"JSX"的特
可莉 可莉
3年前
04. react 初次见面
    组件从概念上看就像是函数,它可以接收任意的输入值(称之为“props”),并返回一个需要在页面上展示的React元素。1、组件定义的两种方式1.1函数定义组件  定义一个组件最简单的方式是使用JavaScript函数:functionWelcome(props){return<
Stella981 Stella981
3年前
Angular使用总结
  之前自己写的公共组件,都是会先引入,需要调起的时候再通过service控制公共组件状态、值、回调函数什么的。但是有一些场景不适合这种方式,还是动态添加组件更加好。通过写过的一个小组件来总结下。创建组件  场景:鼠标移动到图标上时,展示解释性的说明文字。那就需要创建一个普通的tooltip组件。如下:!(https://oscim
美凌格栋栋酱 美凌格栋栋酱
4个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(