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)

相关文章
|
4月前
|
资源调度 前端开发 JavaScript
React 的antd-mobile 组件库,嵌套路由
React 的antd-mobile 组件库,嵌套路由
42 0
|
3月前
|
存储 前端开发 中间件
React组件间的通信
React组件间的通信
17 1
|
3月前
|
前端开发
react高阶成分(HOC)
react高阶成分(HOC)
18 1
|
3月前
|
前端开发 应用服务中间件 数据库
react服务端组件
react服务端组件
21 0
|
3月前
|
前端开发 JavaScript
快速上手React:从概述到组件与事件处理
快速上手React:从概述到组件与事件处理
|
4月前
|
前端开发 JavaScript API
React组件生命周期
React组件生命周期
76 1
|
4月前
|
资源调度 前端开发 JavaScript
React组件
React组件
42 0
|
4月前
|
存储 前端开发 JavaScript
探索 React Hooks 的世界:如何构建出色的组件(下)
探索 React Hooks 的世界:如何构建出色的组件(下)
探索 React Hooks 的世界:如何构建出色的组件(下)
|
4月前
|
缓存 前端开发 API
探索 React Hooks 的世界:如何构建出色的组件(上)
探索 React Hooks 的世界:如何构建出色的组件(上)
探索 React Hooks 的世界:如何构建出色的组件(上)
|
4月前
|
存储 前端开发 JavaScript
React组件中如何通讯
React组件中如何通讯
16 0