react-5 高阶组件 (HOC) --- 高阶函数(HOF)

news/2024/7/15 17:58:02 标签: react.js, 前端, 前端框架

高阶函数:指一类函数,防抖,节流

`防抖`: 短时间内频繁触发同一事件时,只有最后一次生效. 例如电梯关门的效果

`节流`: 短时间内频繁触发同一个事件时,在单位时间内,只生效一次。例如lol英雄的大招

 箭头函数每次触发都会执行一次。但是执行的不是debounce这个高阶函数返回的闭包函数。

所以:防抖节流不要箭头函数

//utils下tools.js工具

import React, { Component } from 'react';
// 高阶函数HOF:eg:防抖节流
// 防抖
export function debounce(func, time ) {
    var timerid = null;
    return function(){
        if (timerid) { //如果定时器存在,则销毁定时器
            clearTimeout(timerid)
        }
        // 创建新的定时器
        timerid = setTimeout(()=>{
            func()
        },time)
    }
}
// 节流
export function throttle(func, time){
    var timerid = null;
    return function(){
        if(!timerid){ //如果定时器不存在 则创建定时器
            // 创建新的定时器
            timerid = setTimeout(()=>{
                func();
                // 执行完会清除定时器,然后让timerid回归null
                clearTimeout(timerid)
                timerid = null
            }, time)
        }
    }
}

使用防抖节流

import React, { Component } from 'react';
import './App.css'
//导入工具
import {debounce,throttle} from './utils/tools'
// 
import A from './components/A'
import B from './components/B'
import C from './components/C'
class App extends Component {
  // 发请求了
  handleChange(){
    console.log("发送请求");
    
  }
  render() {
    return (
      <div className='app'>
        {/* 防抖演示:错误 */}
        {/* <input type="text" onChange={()=>{this.handleChange()}}/> */}
        {/* 防抖演示:正确 */}
        <input type="text" onChange={debounce(this.handleChange, 300) }/>
        <br />
        <br />
        <br />
        {/* 节流演示:错误 */}
        {/* <input type="text" onChange={()=>{this.handleChange()}}/> */}
        {/* 节流演示:正确 */}
        {/* <input type="text" onChange={this.handleChange}/> */}
        <input type="text" onChange={throttle(this.handleChange,200)}/>

        <A></A>
        <B></B>
        <C></C>
      </div>
    );
  }
}

export default App;

 高阶组件:复用组件逻辑

高阶组件就是一个函数,它接收一个组件作为输入,然后返回一个新的组件作为结果,且所返回的新组件会进行相对逻辑增强

 拖拽

//utils下tools.js工具

import React, { Component } from 'react';


// 高阶组件(重用拖拽逻辑)
export function DragHOC(Com){
    return class tools extends Component{
        constructor(props){
            super(props);
            this.state = {top:0,left:0}
        }
        handleMouseDown(){
            // 鼠标移动时,获取鼠标的位置
            document.onmousemove = (e)=>{
                this.setState({left:e.pageX,top:e.pageY})
            }
            document.onmouseup = ()=>{
                document.onmousemove = null
            }
        }
        render(){
            return(
                <div onMouseDown={()=>{this.handleMouseDown()}} style={{position:'absolute',left:this.state.left + 'px',top:this.state.top + 'px'}}>
                    <Com />
                </div>
            )
        }
    }
}

抛出前处理一下组件 ,A,B,C三个组件

需要装饰器配置才能使用@DragHOC:::自行配置

import React, { Component } from 'react';
import './A.css'

import { DragHOC } from '../utils/tools';

//以装饰器语法,应用高阶组件
@DragHOC
class A extends Component {
    render() {
        return (
            <div className='a'>
                a组件
            </div>
        );
    }
}

//export default DragHOC(A);
export default A;

css

 

装饰器配置:::@DragHOC

 

1.

2.

3.

4.

5.

 


http://www.niftyadmin.cn/n/232388.html

相关文章

训练机器学习模型,可使用 Sklearn 提供的 16 个数据集 【上篇】

数据是机器学习算法的动力&#xff0c;scikit-learn或sklearn提供了高质量的数据集&#xff0c;被研究人员、从业人员和爱好者广泛使用。Scikit-learn&#xff08;sklearn&#xff09;是一个建立在SciPy之上的机器学习的Python模块。它的独特之处在于其拥有大量的算法、十分易用…

生成对抗网络项目:6~9

原文&#xff1a;Generative Adversarial Networks Projects 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 本文来自【ApacheCN 深度学习 译文集】&#xff0c;采用译后编辑&#xff08;MTPE&#xff09;流程来尽可能提升效率。 不要担心自己的形象&#xff0c;只关心…

flink任务处理下线流水数据,数据遗漏不全(三)

flink任务处理下线流水数据&#xff0c;数据遗漏不全&#xff08;二&#xff09; 居然还是重量&#xff0c;做一个判断&#xff0c;如果是NaN 就直接获取原始的数据的重量 测试后面会不会出现这个情况&#xff01; 发现chunjun的代码运行不到5h以后&#xff0c;如果网络不稳…

损失函数(Loss Function)一文详解-分类问题常见损失函数Python代码实现+计算原理解析

目录 前言 一、损失函数概述 二、损失函数分类 1.分类问题的损失函数 1.交叉熵损失函数&#xff08;Cross Entropy Loss&#xff09; 2.Hinge损失函数 3.余弦相似度损失函数&#xff08;Cosine Similarity Loss&#xff09; 4.指数损失函数&#xff08;Exponential Los…

租车管理系统【GUI/Swing+MySQL】(Java课设)

系统类型 Swing窗口类型Mysql数据库存储数据 使用范围 适合作为Java课设&#xff01;&#xff01;&#xff01; 部署环境 jdk1.8Mysql8.0Idea或eclipsejdbc 运行效果 本系统源码地址&#xff1a;https://download.csdn.net/download/qq_50954361/87682508 更多系统资源库…

创造rap一首,关于毕业论文难写,导师不负责

Verse1: 毕业季节&#xff0c;任务繁重 毕业论文&#xff0c;压力倍增 想着论文顺利&#xff0c;却被教授推脱 努力攀登高峰&#xff0c;却是一场空 Chorus: 毕业论文难写&#xff0c;导师不负责 对论文监督&#xff0c;一筹莫展 毕业论文难写&#xff0c;难缠之处 摆脱麻烦&am…

C++:std::function模板类(前言):为什么有了函数指针还需要Functional

为什么有了函数指针还有 Functional1: 函数指针定义2&#xff1a; 函数指针结论3&#xff1a;疑问4&#xff1a; Function来源1: 函数指针定义 在C中可以使用指针指向一段代码&#xff0c;这个指针就叫函数指针&#xff0c;假设有下面一段代码 #include<iostream> int …

逻辑回归与梯度下降法

逻辑回归&#xff1a;是用来进行分类的。 逻辑回归的线性预测输出可以写成&#xff1a;y^wTxb 引入Sigmoid函数&#xff0c;让输出限定在[0,1]之间&#xff0c;y^Sigmoid(wTxb)σ(wTxb) 单个样本损失函数&#xff1a;L(y^,y)−(ylog y^(1−y)log (1−y^)) 对逻辑回归进行梯度…