zoukankan      html  css  js  c++  java
  • React 之 高阶函数_函数柯里化

    数据柯里化的作用是什么?

    在处理表单时,可以通过ref的三种方式都可以获取表单控件数据,但是若是很多控件,都去定义一个ref(过多的使用会有性能问题),或者定义多个函数,那么就太臃肿了,那么数据柯里化可以解决

    高阶函数: 若一个函数符合下面两个规范中的一个,该函数就是高阶函数

        1.若a函数,接受的参数是一个函数,那么a就可以称为高阶函数

        2.若a函数,调用的返回值依旧是一个函数,那么a就可以称之为高阶函数

        3.常见的高阶函数有:promise,setTimeout,arr.map等

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

    说了那么多,先来看一段代码

    handleSubmit=(event)=>{
            event.preventDefault()
            let {username,password}  = this.state
            console.log(`您输入的用户名是:${username},您输入的密码是:${password}`)
          
          }
    //函数的柯里化 也是高阶函数 saveFormData
    = (dataType)=>{ return (event)=>{ this.setState({[dataType]:event.target.value}) } } 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> ) } } ReactDOM.render(<Demo/>,document.getElementById('test1'))

    思考:能不使用函数柯里化也能实现吗?

    handleSubmit=(event)=>{
            event.preventDefault()
            let {username,password}  = this.state
            console.log(`您输入的用户名是:${username},您输入的密码是:${password}`)
          
          }
          saveFormData = (dataType,value)=>{
              this.setState({[dataType]:event.target.value})
          }
          render(){
            return (
              <form onSubmit={this.handleSubmit}>
                 用户名:<input onChange={(event =>{this.saveFormData('username',event.target.value)})} type="text" name="username"/>
                 密码: <input onChange={(event)=>{this.saveFormData('password',event.target.value)}} type="password" name="password" />
                 <button>登录</button>
              </form>
            )
          }
        }
        ReactDOM.render(<Demo/>,document.getElementById('test1'))
  • 相关阅读:
    jquery ajax你会了吗?
    JS写Cookie
    [活动通知]Nanjing GDG 2013年4月活动
    UITableView刷新数据reLoadData
    FMS4.0 客户端访问服务器脚本文件 main.asc
    关于IOS6屏幕旋转
    Windows平台下Makefile学习笔记(二)
    编译MapWindowGis源码出现的重定义的问题及解决办法
    你的 mixin 兼容 ECMAScript 5 吗?
    有点坑爹的gdal库
  • 原文地址:https://www.cnblogs.com/zmztya/p/14632014.html
Copyright © 2011-2022 走看看