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

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

前言

学习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)

相关文章
|
6月前
|
资源调度 前端开发 JavaScript
React 的antd-mobile 组件库,嵌套路由
React 的antd-mobile 组件库,嵌套路由
121 0
|
3月前
|
存储 前端开发 JavaScript
最适合新手学习的react案例-Todolist尊享版!
【8月更文挑战第13天】最适合新手学习的react案例-Todolist尊享版!
57 2
最适合新手学习的react案例-Todolist尊享版!
|
2月前
|
前端开发
React技术栈-react使用的Ajax请求库实战案例
这篇文章介绍了在React应用中使用Axios和Fetch库进行Ajax请求的实战案例,展示了如何通过这些库发送GET和POST请求,并处理响应和错误。
54 10
React技术栈-react使用的Ajax请求库实战案例
|
2月前
|
前端开发
React技术栈-react使用的Ajax请求库用户搜索案例
这篇文章展示了一个React技术栈中使用Ajax请求库(如axios)进行用户搜索的实战案例,包括React组件的结构、状态管理以及如何通过Ajax请求获取并展示GitHub用户数据。
33 7
React技术栈-react使用的Ajax请求库用户搜索案例
|
2月前
|
前端开发 NoSQL MongoDB
React技术栈-基于react脚手架编写评论管理案例
这篇文章介绍了在MongoDB中使用sort和投影来对查询结果进行排序和限制返回的字段,通过具体的命令示例展示了如何实现这些操作。
50 6
React技术栈-基于react脚手架编写评论管理案例
|
2月前
|
前端开发
react学习(22)高阶函数和函数柯里化
react学习(22)高阶函数和函数柯里化
|
2月前
|
前端开发 JavaScript
React技术栈-react的脚手架创建应用案例
本文介绍了如何使用React的官方脚手架工具create-react-app快速创建React项目,并展示了项目的目录结构和基本的代码文件,以及如何启动和运行React应用。
33 2
|
6月前
|
设计模式 前端开发 API
React的高阶组件(HOC):使用与设计模式探讨
【4月更文挑战第25天】React的高阶组件(HOC)是一种复用和增强组件的高级模式,它接受组件并返回新组件。非侵入式增强使得HOC能在不修改原有组件代码的情况下添加功能。定义HOC后,将其应用于目标组件并渲染增强后的组件。常见设计模式包括属性代理、控制反转和装饰器。然而,使用时要注意避免滥用,保持命名清晰,关注性能优化。理解并恰当使用HOC能提升React应用的构建效率。
|
6月前
|
存储 前端开发 中间件
React组件间的通信
React组件间的通信
52 1
|
6月前
|
前端开发
react高阶成分(HOC)
react高阶成分(HOC)
46 1