react中使用高阶函数和函数柯里化

概念

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

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

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

使用高阶函数和函数柯里化

<script type="text/babel">
	//创建组件
	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>

不用函数柯里化实现,通过这种方式实现onChange={event => this.saveFormData(‘username’,event)}

直接在 { } 中写一个箭头函数作为 onChange 的回调函数,这个箭头函数的参数是 onChange 的事件对象,在箭头函数中直接执行 saveFormData 函数,参数是 dataType 和 event,saveFormData 函数拥有了这两个参数,就可以适配所有的 input 框了。

<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>

猜你喜欢

转载自blog.csdn.net/weixin_48952990/article/details/126581375