Dimples's blog Dimples's blog
首页
  • 前端随笔

    • React
  • 系列文章

    • 《ES6 教程》笔记
    • 《Vue》笔记
    • 《TypeScript》笔记
  • 后端文章

    • Java
    • Python
    • 数据库
  • 学习笔记

    • 《Rust》笔记
    • 《SpringBoot》笔记
    • 《Django》笔记
    • 《Docker》笔记
    • 《Python爬虫》笔记
技术分享
友情链接
索引
关于
GitHub (opens new window)

DimplesY

不会写代码
首页
  • 前端随笔

    • React
  • 系列文章

    • 《ES6 教程》笔记
    • 《Vue》笔记
    • 《TypeScript》笔记
  • 后端文章

    • Java
    • Python
    • 数据库
  • 学习笔记

    • 《Rust》笔记
    • 《SpringBoot》笔记
    • 《Django》笔记
    • 《Docker》笔记
    • 《Python爬虫》笔记
技术分享
友情链接
索引
关于
GitHub (opens new window)
  • React

    • 在React当中使用scss和按需加载antd
    • 使用Redux制作一个TodoList
    • React跨域配置
    • JS 当中的函数柯里化和高阶函数
      • 一、函数柯里化
      • 二、受控组件当中使用函数柯里化
      • 三、高阶函数
    • useState的使用
  • 学习笔记

  • 前端
  • React
DimplesY
2020-12-27

JS 当中的函数柯里化和高阶函数

# JS 当中的函数柯里化和高阶函数

# 一、函数柯里化

在使用 React 的时候,有受控组件和非受控组件,在受控组件当中,通过 onChange 的事件来修改组件的状态,一般数量少表单控件可以采用一个控件一个监听函数的方式来编写,但是这种写法会让我们写大量的重复代码,所以我们应该采用函数柯里化的方式来编写

柯里化: 在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术

如下一个最简单的实例,求和:

function sum(a, b, c) {
  return a + b + c;
}
sum(1, 2, 3); // 6
1
2
3
4

采用函数柯里化的方式来写的话就如下:

function sum(a) {
  return (b) => {
    return (c) => {
      return a + b + c;
    };
  };
}

sum(1)(2)(3); // 6
1
2
3
4
5
6
7
8
9

# 二、受控组件当中使用函数柯里化

使用方法如下面代码所示:

class Login extends React.Component {
  //初始化状态
  state = {
    username: "", //用户名
    password: "", //密码
  };

  //保存表单数据到状态中
  saveFormData = (dataType) => {
    return (event) => {
      this.setState({ [dataType]: event.target.value });
    };
  };

  //表单提交的回调
  handleSubmit = (event) => {
    event.preventDefault(); //阻止表单提交
    const { username, password } = this.state;
    alert(`你输入的用户名是:${username},你输入的密码是:${password}`);
  };
  render() {
    return (
      <form onSubmit={this.handleSubmit}>
        用户名:
        <input
          onChange={this.saveFormData("username")}
          type="text"
          name="username"
        />
        密码:
        <input
          onChange={this.saveFormData("password")}
          type="password"
          name="password"
        />
        <button>登录</button>
      </form>
    );
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40

# 三、高阶函数

如果一个函数符合下面 2 个规范中的任何一个,那该函数就是高阶函数。

​ 1、若 A 函数,接收的参数是一个函数,那么 A 就可以称之为高阶函数。

​ 2、若 A 函数,调用的返回值依然是一个函数,那么 A 就可以称之为高阶函数。

​ 常见的高阶函数有:Promise、setTimeout、arr.map()等等

JavaScript 当中的高阶函数使用指南: 高阶函数 (opens new window)

帮助我修改此页面 (opens new window)
上次更新: 2022/11/20, 18:28:09
React跨域配置
useState的使用

← React跨域配置 useState的使用→

最近更新
01
使用 strapi 快速构建 API 和 CMS 管理系统
03-03
02
Rust 开发环境
11-26
03
使用 paka.dev 为 npm 包生成文档
11-24
更多文章>
Theme by Vdoing | Copyright © 2020-2025 Dimples YJ | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式