React高阶组件(表单)应用回顾

46 篇文章 3 订阅
17 篇文章 1 订阅

1. 首先介绍函数式编程:

function hello(){
    console.log('大家好,我是harry!')
}

function getWord(fn){
    return function(){
        console.log('大家好,我是林宇航');
        fn();
        console.log('大家好,我是猪猪侠')
    }
}

let h = getWord(hello);

h();

//打印结果:
大家好,我是林宇航
大家好,我是harry!
大家好,我是猪猪侠

2. 高阶组件的定义:

就是一个函数,这个函数传入一个组件,然后返回一个新的组件;为了代码的复用性,减少代码的冗余;“ 所谓的组件本质上都是函数 ” 

2-1. 高阶组件属性代理:

(1)普通高阶组件写法

class Hello extends Component{
    render(){
        return ( <h3> 深圳,你好! </h3> )
    }
}


function WrapperHello(Comp){
    class WrapComp extends Component{
        render(){
            return ( 
                <div>
                    <h3> 高阶组件,你好! </h3>  
                    <Comp {...this.props}></Comp>
                </div>
            )
        }
    }

    return WrapComp;
}

Hello = WrapperHello(Hello);

<Hello></Hello>

//结果:
高阶组件,你好!
深圳,你好!

(2)ES7 装饰器写法:

function WrapperHello(Comp){
    class WrapComp extends Component{
        render(){
            return ( 
                <div>
                    <h3> 高阶组件,你好! </h3>  
                    <Comp {...this.props}></Comp>
                </div>
            )
        }
    }

    return WrapComp;
}

@WrapperHello
class Hello extends Component{
    render(){
        return ( <h3> 深圳,你好! </h3> )
    }
}

//结果:
高阶组件,你好!
深圳,你好!

3. 高阶组件反向继承

function WrapperHello(Comp){
    class WrapComp extends Comp{

        componentDidMount(){
           //进行加载完成后的处理 
           console.log('高阶组件加载完成!');   
        }

        render(){
            return ( 
                <div>
                    <Comp {...this.props}></Comp>
                </div>
            )
        }
    }

    return WrapComp;
}

@WrapperHello
class Hello extends Component{
    render(){
        return ( <h3> 深圳,你好! </h3> )
    }
}

<Hello></Hello>

4. 登录注册高阶组件封装

export default function LRForm(Comp){

	return class WrapFromComp extends Component{
		
		constructor(props){
			super(props);
			this.state = {};
		}

		handleChange = (k,v)=>{
			console.log(k,v);
	        this.setState({
	            [k]: v
	        })
	    }

		render(){
			return (
				<div>
					<Comp {...this.props} handleChange={this.handleChange} state={this.state}></Comp>
				</div>
			);
		}
	}
}

5. 表单数据封装的高阶组件调用:

import LRForm from ‘@/component/form/form.js';

@LRForm
class Login extends Component{
	//…
}

@LRForm
class Register extends Component{
	//…
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我的小英短

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值