React 入门必备 【第二关 】React面向组件编程之高阶函数与函数柯里化(选看)

目的:增加代码复用性

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

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

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

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

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

含义:saveFormData作为onChange的回调

onChange = {this.saveFormData}

通过参数保存表单数据 

含义:saveFormData的返回值作为onChange的回调

改为:

onChange = {this.saveFormData('name')}

定义 回调函数 保存表单数据到状态中

this.setState({name:event.target.value});

改为: 

this.setState({[dataType]:event.target.value});

完整版代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id = "div">

    </div>

</body>
<!-- 引入依赖 ,引入的时候,必须就按照这个步骤-->
<script src="../React-js/react.development.js" type="text/javascript"></script>
<script src="../React-js/react-dom.development.js" type="text/javascript"></script>

<script src="../React-js/babel.min.js"></script>

<!--引入对于组件标签的限制-->
<script src="../React-js/prop-types.js"></script>

<script type="text/babel">

/*
    高级函数:
    1.如果函数的参数是函数
    2.如果函数返回一个函数
    函数的珂里化:
    通过函数调用继续返回函数的方式,实现多次接收参数最后统一处理的函数编码形式
*/

    class Login extends React.Component{

        login = (event) =>{
            event.preventDefault(); //阻止表单提交
            console.log(this.name.value);
            console.log(this.pwd.value);
        }

        state = {name:"",pwd:""};

        saveFormdata = (dataType) =>{
            return (event) => {
                this.setState({[dataType]:event.target.value});
            }
        }


        //因为事件中必须是一个函数,所以返回的也是一个函数,这样就符合规范了
        render() {
            return (
                <form action="http://www.baidu.com" >
                    用户名:<input onChange = {this.saveFormdata('name')} type = "text" name ="username"/>
                    {/*直接调用回调函数也是可以的:将数据传递过去就可以*/}
                    用户名:<input onChange = {(event)=>{this.saveFormdata('name',event)}} type = "text" name ="username"/>
                    密码<input onChange = {this.saveFormdata('pwd')} type = "password" name ="password"/>
                    <button>登录</button>
                </form>
            )
        }
    }

    ReactDOM.render(<Login />,document.getElementById("div"));
</script>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值