react(20)——使用函数的柯里化实现获取表单的数据

1.概念

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

  1. 一个函数接收的参数是一个函数。
  2. 一个函数返回的值是一个函数。

函数的柯里化:通过函数调用继续返回函数的方式,实现多次接收参数最后统一处理的函数编码形式。

2.代码

<body>
    <div id="test"></div>

    <script type="text/babel">
      "use strict";

      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 action="https://www.baidu.com" onSubmit={this.handleSubmit}>
              用户名:
              <input
                onChange={this.saveFormData("username")}
                type="text"
                name="username"
              />
              密码:
              <input
                onChange={this.saveFormData("password")}
                type="password"
                name="password"
              />
              <button>登录</button>
            </form>
          );
        }
      }

      ReactDOM.render(<Login />, document.getElementById("test"));
    </script>
  </body>

3.代码讲解

onChange={this.saveFormData("username")}
  1. 如果saveFormData后面没有括号,那么传给onChange的是一个函数;加上括号后,传给onChange的就是saveFormData函数的返回值。
        saveFormData = (dataType) => {
          return (event) => {
            this.setState({
              [dataType]: event.target.value,
            });
          };
        };
  1. 使用函数的柯里化,将该函数的返回值设置成为一个函数,就可以实现一个方法,多个onChange共用了。
  2. event特殊参数在saveFormData中无效,因为onChange中传入的不是saveFormData方法,而是saveFormData返回的方法。
  3. setState中,dataType必须加上中括号,否则会新增一个名为dataType的属性,而不是更新属性。

4.运行结果

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木子 旭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值