react-高阶函数的简单运用

高阶函数

高阶函数本质是一个函数,参数是一个组件,经过处理后再返回一个组件。

高阶函数的功能:强化props,条件渲染,赋能组件(生命周期的劫持,事件的劫持,打印日志)

编写高阶函数

强化props

通过高阶函数注入数据到组件中,那么在使用组件时,就不需要手动传入数据。

propsHoc.js

import React from "react";

export default function propsHoc(Comp) {
    return class WrapperedComp extends React.Component {
        render() {
            return (
                <Comp msg='嘻嘻' />
            )
        }
    }
}
抽离state

在高阶组件里面修改state数据,达到抽离state的作用。

propsHoc.jsx

import React from "react";

export default function propsHoc(Comp) {
    return class WrapperedComp extends React.Component {

        state = {
            msg: '嘻嘻'
        }

        changeMsg = () => {
            console.log('changeMsg');
            this.setState({
                msg: 'web前端'
            })
        }

        render() {
            return (
                <Comp msg={this.state.msg} changeMsg={this.changeMsg} />
            )
        }
    }
}
条件渲染

在高阶函数里面判断是否要渲染参数组件,达到条件控制。

ifHoc.jsx

import React from "react";

export default function ifHoc(Comp) {
    return class WrapperedComp extends React.Component {
        render() {
            const token = localStorage.getItem('token')
            return (
                <>
                    {
                        token ? <Comp /> : <></>
                    }
                </>
            )
        }
    }
}

If.jsx

import React, { Component } from 'react'
import ifHoc from './ifHoc'

class If extends Component {
  render() {
    return (
      <div>If</div>
    )
  }
}

export default ifHoc(If)

打印日志

可以将生命周期中的打印日志操作放到高阶组件中去执行。

import React from 'react';

export default function lifeHoc(Comp) {
    return class WrapperdComp extends React.Component {
        componentDidMount() {
            console.log('打印日志');
        }
        render() {
            return (
                <Comp />
            )
        }
    }
}
反向继承-生命周期拦截

高阶组件可以直接继承自参数组件,这就是反向继承。

import React from "react";

export default function extHoc(Comp) {
    let didMount = Comp.prototype.componentDidMount;
    return class WrapperedComp extends Comp {
        componentDidMount() {
            console.log('WrapperedComp didmount');
            if (didMount) {
                didMount();
            }
        }
        render() {
            return super.render()
        }
    }
}
事件劫持

高阶组件事件劫持。

import React from "react";

export default function eventHoc(Comp) {
    return class WrapperedComp extends React.Component {

        click = () => {
            console.log('click');
        }

        render() {
            return (
                <div onClick={this.click}>
                    <Comp />
                </div>
            )
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值