前言

学习react的同学多多少少对高阶组件有所耳闻,想要学好高阶组件就必须先学好高阶函数的运行,本篇文章就先从高阶函数着手,带大家学习高阶函数和高阶组件的运用

高阶函数

高阶函数(High Order Component)
JS函数其实都是指向某个变量,既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以去接收另外一个函数作为参数,这种函数就称之为高阶函数。

// 一个最简单的高阶函数
function add(x, y, f) {return f(x) + f(y)
}
add(-5, 5, Math.abs) // 10

高阶函数至少满足两个条件(满足一个即可):
1、接收一个或者多个函数作为输入
2、输出一个函数

高阶函数举例说明

我们先来写一个小例子,定义登录登出的函数:
只是写一个简单的函数,注意看下面的是一般的写法

function login() {// usernam一般会从后台接口或者从本地获取const username = 'admin'console.log(username + '登录了')
}function logout() {const username = 'admin'console.log(username + '退出了')
}
login()
logout()

我们可以看到在两个函数中有相同的代码:const username = ‘admin’,如何在实际开发中,可能存在更多的相同代码,那么我们就必须要想办法解决这些冗余代码。

下面来进行优化,方法是写一个中间函数来读取这个username,并且把username传递给两个函数:

讲一下下面代码的逻辑:
看最下面定义了newLogin = useUserName(login),就相当于吧login这个函数作为call传到useUserName里面去,getUserName函数里面的call(username) 就相当于login(username)。logout同理,这里的call是传的一个函数。

function useUserName(call) {// call这里是一个函数function getUserName() {const username = 'admin'call(username)// login(username)// logout(username)}return getUserName
}function login(username) {console.log(username + '登录了')
}function logout(username) {console.log(username + '退出了')
}
const newLogin = useUserName(login)
const newLogout = useUserName(logout)
newLogin()
newLogout()

上面代码里的useUserName接收了login函数,返回了一个函数,它就是一个高阶函数,它帮我们处理了username,获取了username之后传递给目标函数也就是这里的call。但是最终调用执行的是最后的 newLogin 和 newLogout,作为一个调用者来讲就完全不用关心username是从哪里来,平常见到的像map/filter/reduce/sort/Array都是高阶函数。 主要是理解高阶函数的思想。

这一篇给大家介绍了高阶函数,打好基础,了解高阶函数的思想,下一篇给大家带来高阶组件的详细讲解和他的详细用法,点击下面链接查看精彩内容
react中高阶函数与高阶组件的运用—(下)(案例详解登录鉴权与增强props)

react中高阶函数与高阶组件的运用—(上)(案例详细解释高阶函数)相关推荐

  1. react - redux 全局状态管理 、多组件共享状态 - 例子有详细注释

    react全局状态管理 基本概念 下面开始小例子 需要用到的插件redux 代码 - 代码中有详细的注释 参考 阮一峰的网络日志 先来看一下Redux的流程图 基本概念 Store: 保存数据的地方, ...

  2. matlab imcrop 对应python函数_Python精讲Numpy基础,大牛笔记详细解释

    总认为Numpy是渣渣,直到深入接触以后才知道功能这么强大.堪比Matlab啊.果然是人生苦短,我用Python.所以本文作为一个记录&笔记,文章内容大多数取自网络以&官网快速入门等, ...

  3. 如何使用高扩展组件制作APP原型的标签栏?

    原型项目中的组件(亦称元件.控件),是指通过基础图层拼装而成,可供用户进行交互或用于展示复杂内容的元素. 在原型设计工作中,组件的使用是非常重要的部分,其不仅关乎项目内容的呈现,更会影响编辑操作效率. ...

  4. 史上最全的PHP常用函数大全,不看看你就out了(还会不断更新哦!)

    纪录了PHP的一些常用函数和函数代码!不要错过了哦. PHP的一些常用函数 usleep() 函数延迟代码执行若干微秒. unpack() 函数从二进制字符串对数据进行解包. uniqid() 函数基 ...

  5. php函数库快速记忆法_史上最全的php函数大全

    定义了一下方法,具体用法可查百度 usleep() 函数延迟代码执行若干微秒. unpack() 函数从二进制字符串对数据进行解包. uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID ...

  6. matlab amesim 版本,高版本amesim—matlab联合仿真设置详细步骤.pdf

    高版本amesim-matlab联合仿真设置详细步骤 高版本AMESim-MATLAB 联合仿真设置详细步骤 说明:现以AMESimR12 .MATLAB2010a 为例说明,其他版本类似. 1.版本 ...

  7. React 中高阶函数与高阶组件(上)

    虽互不曾谋面,但希望能和您成为笔尖下的朋友 以读书,技术,生活为主,偶尔撒点鸡汤 不作,不敷衍,意在真诚吐露,用心分享 点击左上方,可关注本刊 标星公众号(ID:itclanCoder) 如果不知道如 ...

  8. react中高阶组件

    react高阶组件深入理解.作用以及应用 本文主要以通俗易懂的语言表达自己对高阶组件的一些见解,希望大家多多提问 高阶组件深入理解 高阶组件就是一个函数,传给它一个组件,它返回一个新的组件.新的组件使 ...

  9. 初识react中高阶组件

    高阶组件并不是一个组件,而是一个函数 这个函数返回值是一个组件,并且接受一个组件做为参数:并且返回一个新组件: function HighOC(WrapComponent){ //定义一个高阶组件 , ...

最新文章

  1. spark executor内存分配_二十二、Spark之图解Executor端内存管理
  2. 【哲学】社会主义与资本主义的区别
  3. java解析mqtt_物联网安全系列 | MQTT协议安全
  4. 动态代理之: com.sun.proxy.$Proxy0 cannot be cast to 问题
  5. 超级PK:Sybase与Oracle的十二场性能比拼
  6. mysql/mariadb 安装开启spinx引擎
  7. python入门之运算符的使用第一关_python基础教程之python 学习第四天|python基础教程|python入门|python教程...
  8. 【转】cron表达式详解
  9. ryzen linux 搭配显卡,R5 1500X配什么显卡好 适合AMD锐龙5 1500X搭配的显卡推荐
  10. 【历史上的今天】3 月 13 日:Windows NT 之父出生;首届无人车顶级赛事;微软上市
  11. 如何轻松搞定内网摄像头远程运维?EasyNTS上云网关简单三步实现设备公网远程控制、远程配置
  12. Stata作回归分析
  13. lol手游修改服务器,英雄联盟官方修改大区的方法
  14. 原来收汇宝真的是很烂
  15. 寒假集训难题(四)QWQ和神奇的传送器nefu1608
  16. WPF 布局 - Grid, StackPanel, DockPanel, WrapPanel
  17. CAN详解--CAN与com口介绍
  18. Sklearn-GBDT(GradientBoostingDecisionTree)梯度提升树
  19. MongoDB学习记录
  20. 5.12汶川7.8级大地震

热门文章

  1. NLP的Flair简介:一个简单但功能强大的最先进的NLP库
  2. 如何生成一个易记安全的密码
  3. 魔鬼训练 Day 3
  4. 芋道平台工程名、包名修改工具
  5. 电脑win7蓝屏没有修复计算机,Win7系统由于peckp.sys文件导致电脑蓝屏怎么修复
  6. 2017计算机考研统考,2017年计算机统考408考研真题.pdf
  7. 饮冰l于 2021-02-05 15:16:54 发布 1288收藏 11分类专栏: 图 文章标签: 算法 数据挖掘 机器学习 深度学习版权图 专栏收录该内容66 篇文章 23 订阅订
  8. Eclipse代码GUI导出桌面双击运行
  9. cad图形如何导入到奥维地图_如何使用关联点将CAD导入到奥维
  10. nacis服务注册原理_服务注册和发现之Eureka原理篇