react 实现双向绑定以及事件绑定

import React from 'react';

class Test extends React.Component{
    constructor(props){
        super(props);
        this.state = {
            email: "",
            intro: "",
            city: "hz",
            male: true, //性别
            emailError: "",
            introError: ""
        }
    }
    handleEmail (e) {
        let value = e.target.value;
        let error = '';
        if(!(/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(value))) {
            error = '请输入正确的Email';
        }
        this.setState({
            email: value,
            emailError: error
        });
    }
    handleIntro (e) {
        let value = e.target.value;
        let error = "";
        if(value.length < 10) {
            error = "介绍不能少于十个字";
        }
        this.setState({
            intro: value,
            introError: error
        });
    }
    handleCity(e) {
        let value = e.target.value;
        this.setState({
            city: value,
        });
    }
    handleGender(e) {
        let male = !!(e.target.value === 'MALE');
        this.setState({
            male: male
        });
    }
    getData (){
        console.log(this.state)
    }
    render () {
        return (
            <div>
                <p>
                    <label htmlFor='email'>email:</label>
                    <input type='text' name='intro' id='intro' value={this.state.email} onChange={this.handleEmail.bind(this)}/>
                    <span>{this.state.emailError}</span>
                </p>
                <p>
                    <label htmlFor='intro'>intro:</label>
                    <textarea type='text' name='intro' id='intro' value={this.state.intro} onChange={this.handleIntro.bind(this)}/>
                    <span>{this.state.introError}</span>
                </p>
                <p>
                    <label htmlFor='city'>所在城市:</label>
                    <select name='city' id='city' value={this.state.city} onChange={this.handleCity.bind(this)}>
                        <option value='hz'>杭州</option>
                        <option value='bj'>北京</option>
                        <option value='sh'>上海</option>
                    </select>
                </p>
                <p>
                    <label>性别:</label>
                    <input type='radio' name='gender' checked={this.state.male} onChange={this.handleGender.bind(this)}
                           value='MALE'/>
                    <input type='radio' name='gender' checked={!this.state.male} onChange={this.handleGender.bind(this)}
                           value='FEMALE'/>
                </p>
                <button onClick={this.getData.bind(this)}>点击</button>
            </div>
        )
    }
}
export { Test as default}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值