React10-高阶函数与柯里化

59 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 10 天,点击查看活动详情

高阶函数与柯里化

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

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

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

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

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

function sum(a){

return(b)=>{

return (c)=>{

return a+b+c

}

}

}

另外:在文件代码中,注释是可以进行折叠的!只需要在注释的开头和结尾添加//#region 与 //#endregion即可

举个栗子:

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

这样在代码中点击第一行注释//#region左侧就可以进行注释隐藏咯~

包含表单的组件分类:

  • 非受控组件:现用现取。即需要使用时,再获取节点得到数据
  • 受控组件:类似于 Vue 双向绑定的从视图层绑定到数据层

尽量使用受控组件,因为非受控组件需要使用大量的 ref

函数的柯里化

     <script type="text/babel">
         //#region 
                 /* 
                     高阶函数:如果一个函数符合下面2个规范中的任何一个,那该函数就是高阶函数。
                                     1.若A函数,接收的参数是一个函数,那么A就可以称之为高阶函数。
                                     2.若A函数,调用的返回值依然是一个函数,那么A就可以称之为高阶函数。
                                     常见的高阶函数有:Promise、setTimeout、arr.map()等等
 ​
                     函数的柯里化:通过函数调用继续返回函数的方式,实现多次接收参数最后统一处理的函数编码形式。 
                         function sum(a){
                             return(b)=>{
                                 return (c)=>{
                                     return a+b+c
                                 }
                             }
                         }
                     */
         //#endregion
         //创建组件
         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>
                 )
             }
         }
         //渲染组件
         ReactDOM.render(<Login/>,document.getElementById('test'))
     </script>
  • 高阶函数:参数为函数或者返回一个函数的函数,如 Promise、setTimeout、Array.map()
  • 函数柯里化:通过函数调用继续返回函数的方式,实现多次接收参数最后统一处理的函数编码形式

不用函数柯里化的实现

     <script type="text/babel">
         //创建组件
         class Login extends React.Component{
             //初始化状态
             state = {
                 username:'', //用户名
                 password:'' //密码
             }
 ​
             //保存表单数据到状态中
             saveFormData = (dataType,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={event => this.saveFormData('username',event) } type="text" name="username"/>
                         密码:<input onChange={event => this.saveFormData('password',event) } type="password" name="password"/>
                         <button>登录</button>
                     </form>
                 )
             }
         }
         //渲染组件
         ReactDOM.render(<Login/>,document.getElementById('test'))
     </script>