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

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

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

`节流`: 短时间内频繁触发同一个事件时,在单位时间内,只生效一次。例如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 (
      
{/* 防抖演示:错误 */} {/* {this.handleChange()}}/> */} {/* 防抖演示:正确 */}


{/* 节流演示:错误 */} {/* {this.handleChange()}}/> */} {/* 节流演示:正确 */} {/* */}
); } } 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(
                
{this.handleMouseDown()}} style={{position:'absolute',left:this.state.left + 'px',top:this.state.top + 'px'}}>
) } } }

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

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

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

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

//以装饰器语法,应用高阶组件
@DragHOC
class A extends Component {
    render() {
        return (
            
a组件
); } } //export default DragHOC(A); export default A;

css

 react-5 高阶组件 (HOC) --- 高阶函数(HOF)_第1张图片

装饰器配置:::@DragHOC

react-5 高阶组件 (HOC) --- 高阶函数(HOF)_第2张图片

 

1.

2.

3.

4.

5.

 

你可能感兴趣的:(react,react.js,前端,前端框架)