react-5 高阶组件 (HOC)(防抖节流) --- 高阶函数(HOF)(拖拽)

news2024/11/28 6:26:04

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

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

`节流`: 短时间内频繁触发同一个事件时,在单位时间内,只生效一次。例如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.coloradmin.cn/o/423360.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【SpringBoot】面试组合技-天羽屠龙舞,SpringBootApplication注解的作用是什么?SpringBoot怎么实现自动装配的?

SpringBoot源码下载地址&#xff1a;https://github.com/spring-projects/spring-boot/tags 文章目录&#x1f35f;下载源码&#x1f357;环境准备&#x1f356;注解解析&#x1f35d;SpringBootConfiguration注解&#x1f35b;EnableAutoConfiguration注解&#x1f364;AutoC…

Kettle7.0同步数据(简单操作步骤hive-hive)

一、Kettle说明介绍和原理说明 Kettle是一款免费的ETL工具。 ETL分别是“Extract”、“ Transform” 、“Load”三个单词的首字母缩写&#xff0c;也就是代表ETL过程的三个最主要步骤&#xff1a;“抽取”、“转换”、“装载”&#xff0c;但我们平时往往简称其为数据抽取。 ET…

opencv:了解Shi-Tomasi角点检测器及其使用

目标 在本章中,我们将学习另一种角点检测器:Shi-Tomasi角点检测器,并且探索函数cv.goodFeaturesToTrack()的使用方法。 理论 在上一章中,我们学习了Harris角点检测器。后来,在1994年,石屹和托马斯对其进行了一些小的修改,提出了《Good Features to Track》这篇论文,相…

矩阵转置(函数)(C语言实现)

【题目描述】 写一个函数&#xff0c;将一个n*n&#xff08;n<10&#xff09;的二维数组进行转置&#xff0c;即行列交换。要求在主函数中完成输入和输出。 【输入说明】 输入第一行只包括1个数字&#xff0c;表示n&#xff0c;接下来有n行&#xff0c;每行有n个整数。 …

[Java]Session机制

什么是Session Session是另一种记录客户状态的机制&#xff0c;不同的是Cookie保存在客户端浏览器中&#xff0c;而Session保存在服务器上。客户端浏览器访问服务器的时候&#xff0c;服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需…

基于springboot和ajax的简单项目 04.html文件的js用来分页功能,有专门的分页页面html文件(下)

01&#xff0c;因为分页的功能是很多场景都需要使用的&#xff0c;所以可以单独提出来&#xff0c;到时候加载到相关html的div中就好了。 最开始初始化分页html文件&#xff08;page.html&#xff09;的全部代码&#xff1a;&#xff08;直接使用的是ul&#xff0c;li&#xff…

LeetCode算法小抄--快速排序详解及应用

LeetCode算法小抄--快速排序详解及应用快速排序详解及应用代码实现快速选择算法&#xff08;Quick Select&#xff09;-- 变体[215. 数组中的第K个最大元素](https://leetcode.cn/problems/kth-largest-element-in-an-array/)[剑指 Offer II 076. 数组中的第 k 大的数字](https…

LCMXO2-2000HC-4FTG256I FPGA lattice 深力科MachXO2系列超低功耗非易失PLD器件特性及原理图

LCMXO2-2000HC-4FTG256I FPGA lattice 深力科MachXO2系列超低功耗非易失PLD器件特性及原理图 lattice莱迪斯深力科电子 MachXO2系列 LCMXO2-2000HC-4FTG256I 超低密度FPGA现场可编程门阵列&#xff0c;适用于低成本的复杂系统控制和视频接口设计开发&#xff0c;满足了通信、计…

std::condition_variable::wait_for 的几个细节

std::condition_variable::wait_for 的两种重载用法https://blog.csdn.net/smalbig/article/details/130152253 &#xff08;以下简称上篇&#xff09;直观上介绍了 std::condition_variable::wait_for 的使用效果&#xff0c;这篇对没解释清楚的注释、执行结果进行解释。 1.…

大话 HTTP 协议前世今生

HTTP 全称 Hypertext Transfer Protocol&#xff0c;中文是超文本传输协议。网上讲 HTTP 协议的资料可以说是五花八门&#xff0c;但大多数都在罗列 HTTP 协议具体的规定&#xff0c;很少有讲 HTTP 协议这样设计的原因。今天我就尝试从解决问题的角度分析 HTTP 协议主要特性&am…

Android init学习笔记

init大体介绍 init是Android启动的第一个用户空间进程&#xff0c;它fork产生一些关键进程&#xff0c;如zygote、surfaceflinger进程。 init进程有很多功能&#xff1a;加载内核模块、挂载系统分区、加载sepolicy、支持属性服务、启动rc脚本、执行事件触发器和属性改变等等 …

C++之深入解析STL deque容器的底层实现原理

一、deque 容器的存储结构 事实上&#xff0c;STL 中每个容器的特性&#xff0c;和它底层的实现机制密切相关&#xff0c;deque 自然也不例外&#xff0c;deque 容器擅长在序列的头部和尾部添加或删除元素。想搞清楚 deque 容器的实现机制&#xff0c;需要先了解 deque 容器的…

【Python】实战:生成有关联单选问卷 csv《营养不良风险评估表》

目录 一、适用场景 二、业务需求 三、Python 文件 &#xff08;1&#xff09;创建文件 &#xff08;2&#xff09;示例代码 四、csv 文件 &#xff08;1&#xff09;营养不良风险评估表&#xff08;问题 6 不选“不能取得”&#xff09; &#xff08;2&#xff09;营养…

从输入url到页面展现(一)从浏览器解析url开始

前端面试有一道很考验人的问题&#xff0c;那就是&#xff1a;请你说一下从用户从输入url到页面展现的过程是怎样的&#xff1f;在接下来的一段时间呢&#xff0c;狗哥会从这一问题出发&#xff0c;开始剖析这个过程&#xff0c;希望可以让更多的小伙伴掌握到这个过程&#xff…

【加载plist文件展示单组数据 Objective-C语言】

一、接下来,我们要为大家演示如何通过加载plist文件,使用UITableView展示单组数据, 1.最后运行起来的效果,是一个什么效果呢,是这样一个效果: 2.这个里面,这就是一个单元格吧, 这就是一个单元格, 这个单元格里面,包括一个图片框、一个TextLabel、一个DetailLabel、…

JAVA开发(通过网关gateway过滤器进行返回结果加密)

在对C的网站或者APP后端接口中&#xff0c;参数的传输往往需要加密传输。这时我们 可以通过springcloud的网关过滤器进行统一的控制。 网关过滤器的执行顺序&#xff1a; 请求进入网关会碰到三类过滤器&#xff1a;当前路由过滤器、DefaultFilter、GlobalFilter。 请求路由后…

ChatGPT团队中,3个清华学霸,1个北大学霸,共9位华人

众所周知&#xff0c;美国硅谷其实有着众多的华人&#xff0c;哪怕是芯片领域&#xff0c;华为也有着一席之地&#xff0c;比如AMD 的 CEO 苏姿丰、Nvidia 的 CEO 黄仁勋 都是华人。 还有更多的美国著名的科技企业中&#xff0c;都有着华人的身影&#xff0c;这些华人&#xff…

Vue组件化编程【Vue】

2.Vue 组件化编程 2.1 模块与组件、模块化与组件化 2.1.1 模块 理解&#xff1a;向外提供特定功能的js程序&#xff0c;一般就是一个js文件为什么&#xff1a;js文件很多很复杂作用&#xff1a;复用js、简化js的编写、提高js运行效率。 2.1.2 组件 理解&#xff1a;用来实…

Linux搭建Web服务器(二)——Web Server 与 HTTP

目录 0x01 Web Server 静态网络服务器&#xff08;static web server&#xff09; 动态网络服务器&#xff08;dynamic web server&#xff09; 0x02 HTTP协议 HTTP概述 HTTP工作原理 HTTP请求报文格式 HTTP响应报文格式 0x01 Web Server 一个Web Server就是一个服务器…

我们要被淘汰了?从科技变革看"ChatGPT"与"无代码开发"

现在只要一上网&#xff0c;就能看见GPT都在说“好厉害”、“太牛了”、“新技术要诞生了”、“我们人类要被淘汰了”之类的话题。但是这伟大的技术变革到底给我们带来了什么呢&#xff1f;答案好像又比较模糊。现在ChatGPT的代写、问答&#xff0c;以及开始做的搜索、办公是目…