【React】第五部分 高阶函数和函数的柯里化

【React】第五部分 高阶函数和函数的柯里化



5. 高阶函数和函数的柯里化


什么是高阶函数?

如果一个函数符合下面两种规范的其中一种,那么它就是高阶函数

(1) 函数A , 接收的参数是一个函数 , 例如:定时器、promise

(2) 函数A , 返回值是一个函数


什么是柯里化?

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

举个例子更好的认识柯里化

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

sum(1)(2)(3)

下面做一个案例,输入用户名、密码和验证码,弹窗显示用户信息

  class Login extends React.Component{
            render(){
                return (
                    <form onSubmit={this.handleForm}>
                        用户名:<input onChange={this.saveForm('username')} type="text"/> <br/>
                        密码:<input onChange={this.saveForm('password')} type="password"/> <br/>
                        验证码:<input onChange={this.saveForm('code')} type="text"/> <br/>
                        <button>登录</button>
                    </form>
                )
            }
			// 初始化数据
            state = {
                username:'',
                password:'',
                code:''
            }
			// 提交事件
            handleForm = () =>{
                const {username,password,code}  = this.state
                alert(`用户名:${username} --- 密码:${password} --- 验证码:${code}`)
            }
			// 更新state中的数据
            saveForm = (type) =>{
                // 注意这里和之前的不一样,在上述结构中是将该函数的返回值交给onChange
                // 当数据发生变化的时候onChange实际是调用返回的函数
                // 这个函数就是高阶函数并且满足函数的柯里化
                return (e) =>{
                    this.setState({[type]:e.target.value})
                }
            }
        }

        ReactDOM.render(<Login/>,document.getElementById('box'))

那么如果不用函数的柯里化怎么实现上述功能呢?

class Login extends React.Component{
            render(){
                return (
                    <form onSubmit={this.handleForm}>
                        用户名:<input onChange={event=>this.saveForm('username',event)} type="text"/> <br/>
                        密码:<input onChange={event=>this.saveForm('password',event)} type="password"/> <br/>
                        验证码:<input onChange={event=>this.saveForm('code',event))} type="text"/> <br/>
                        <button>登录</button>
                    </form>
                )
            }
						// 初始化数据
            state = {
                username:'',
                password:'',
                code:''
            }
						// 提交事件
            handleForm = () =>{
                const {username,password,code}  = this.state
                alert(`用户名:${username} --- 密码:${password} --- 验证码:${code}`)
            }
						// 更新state中的数据
            saveForm = (type,e) =>{
                this.setState({[type]:e.target.value})
            }
        }

        ReactDOM.render(<Login/>,document.getElementById('box'))

总结

以上就是今天要讲的内容,希望对大家有所帮助!!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值