/* 高階函數(shù): 如果一個函數(shù)符合下面2個規(guī)范中的任何一個,那該函數(shù)就是高階函數(shù) 1. 若A函數(shù), 接收的參數(shù)是一個函數(shù), 那么A就可以稱之為高階函數(shù) 2. 若A函數(shù), 調(diào)用的返回值依然是一個函數(shù),那么A就可以稱之為高階函數(shù) 常見的高階函數(shù): Promise,setTimeout. arr.map() ..... 函數(shù)的柯里化: 通過函數(shù)調(diào)用繼續(xù)返回函數(shù)的方式,實現(xiàn)多次接收參數(shù)最后統(tǒng)一處理的函數(shù)編碼形式 */ //受控組件: 隨著值的改變,自動存儲到state中,需要用時,直接到this.state中取 class Login extends React.Component{ //初始化狀態(tài) state = { username:'', userpwd :'' } //保存用戶名到狀態(tài)中 //saveFormData的返回值依然是一個回調(diào)函數(shù): 高階函數(shù) 同時也是 函數(shù)的柯里化 saveFormData = (dataType)=>{ console.log(dataType); return (event)=>{ //event是React維護時幫我們生成一個參數(shù)對象 console.log(dataType,event.target.value); this.setState({[dataType]:event.target.value}) //注意:在對象中讀取變量,必須用[] //如: let a = "name" const obj = {} obj[a] = "小明" } } handleSubmit = (event)=>{ event.preventDefault(); //阻止表單的提交事件 阻止默認(rèn)事件 const {username,userpwd} = this.state console.log(`你的用戶名是:${username}, 密碼是: ${userpwd}`); } render(){ return ( <form action="http://tjegd.cn" onSubmit={this.handleSubmit}> 用戶名: <input onChange={this.saveFormData('username')} type="text" /> 密碼: <input onChange={this.saveFormData('userpwd')} type="password" /> {/* onChange= : 這里無論怎么寫,要保證返回值必須是一個回調(diào)函數(shù) */} <button>登陸</button> </form> ) } } ReactDOM.render(<Login/>,document.getElementById("test"));
非高階函數(shù)的使用
class Login extends React.Component{ //初始化狀態(tài) state = { username:'', userpwd :'' } saveFormData = (dataType,event)=>{ this.setState({[dataType]:event.target.value}) } handleSubmit = (event)=>{ event.preventDefault(); //阻止表單的提交事件 阻止默認(rèn)事件 const {username,userpwd} = this.state console.log(`你的用戶名是:${username}, 密碼是: ${userpwd}`); } render(){ return ( <form action="http://tjegd.cn" onSubmit={this.handleSubmit}> 用戶名: <input onChange={event=>this.saveFormData('username',event)} type="text" /> 密碼: <input onChange={event=>this.saveFormData('userpwd',event)} type="password" /> {/* onChange= : 這里無論怎么寫,要保證返回值必須是一個回調(diào)函數(shù) */} <button>登陸</button> </form> ) } } ReactDOM.render(<Login/>,document.getElementById("test"));