React收集表单数据使用高阶函数及非高阶函数的使用

时间:2023-02-01 21:51:00 类型:React
字号:    
 /* 
                高阶函数: 如果一个函数符合下面2个规范中的任何一个,那该函数就是高阶函数
                1. 若A函数, 接收的参数是一个函数, 那么A就可以称之为高阶函数
                2. 若A函数, 调用的返回值依然是一个函数,那么A就可以称之为高阶函数
                常见的高阶函数: Promise,setTimeout. arr.map() .....
                函数的柯里化: 通过函数调用继续返回函数的方式,实现多次接收参数最后统一处理的函数编码形式
            */
            //受控组件: 随着值的改变,自动存储到state中,需要用时,直接到this.state中取
            class Login extends React.Component{
                //初始化状态
                state = {
                    username:'',
                    userpwd :''
                }
                //保存用户名到状态中
                //saveFormData的返回值依然是一个回调函数:  高阶函数  同时也是  函数的柯里化
                saveFormData = (dataType)=>{
                    console.log(dataType);
                    return (event)=>{ //event是React维护时帮我们生成一个参数对象
                        console.log(dataType,event.target.value);
                        this.setState({[dataType]:event.target.value})
                        //注意:在对象中读取变量,必须用[]
                        //如: let a = "name"    const obj = {}  obj[a] = "小明"
                    }
                }
                handleSubmit = (event)=>{
                    event.preventDefault(); //阻止表单的提交事件  阻止默认事件
                    const {username,userpwd} = this.state
                    console.log(`你的用户名是:${username}, 密码是: ${userpwd}`);
                }
                render(){
                    return (
                        <form action="http://www.ncyteng.com" onSubmit={this.handleSubmit}>
                           用户名: <input onChange={this.saveFormData('username')} type="text" />
                           密码:  <input  onChange={this.saveFormData('userpwd')} type="password" />
                           {/* onChange=  : 这里无论怎么写,要保证返回值必须是一个回调函数 */}
                           <button>登陆</button>
                        </form>
                    )
                }
            }
            ReactDOM.render(<Login/>,document.getElementById("test"));

非高阶函数的使用

class Login extends React.Component{
                //初始化状态
                state = {
                    username:'',
                    userpwd :''
                }
               
                saveFormData = (dataType,event)=>{
                        this.setState({[dataType]:event.target.value})
                }
                handleSubmit = (event)=>{
                    event.preventDefault(); //阻止表单的提交事件  阻止默认事件
                    const {username,userpwd} = this.state
                    console.log(`你的用户名是:${username}, 密码是: ${userpwd}`);
                }
                render(){
                    return (
                        <form action="http://www.ncyteng.com" onSubmit={this.handleSubmit}>
                           用户名: <input onChange={event=>this.saveFormData('username',event)} type="text" />
                           密码:  <input  onChange={event=>this.saveFormData('userpwd',event)} type="password" />
                           {/* onChange=  : 这里无论怎么写,要保证返回值必须是一个回调函数 */}
                           <button>登陆</button>
                        </form>
                    )
                }
            }
            ReactDOM.render(<Login/>,document.getElementById("test"));


<