react form 绑定值

react form 表单

一般的表单应用其实不需要实时监控表单项的用户输入,用 defaultValue 

 如果需要数据的双向绑定那么需要value,onChange方法的联合使用

import React from 'react';
import './../assets/css/form.css'
export default class ReactForm extends React.Component{
    /**
     * 
     * @param {*} props 
     * defualtValue
     * value change 
     * 表单绑定值
     */
    constructor(props) {
        super(props);

        this.state = {
            msg: 'form 表单',
            username: "",
            sex: 0, // 0 未知 1 表示男生  2表示女生
            age: '', //
            hobby: [{
                key: "0",
                value: "读书",
                checked: true
            },{
                key: "1",
                value: "游泳",
                checked: false
            },{
                key: "2",
                value: "打羽毛球",
                checked: true
            }],
            city: ['','成都','长沙','广州','深圳','北京']

        }
    }


    hanlderChangeName(e) {
        this.setState({
            username: e.target.value
        })
    }

    handlerChangeSex(e) {
        debugger;
        this.setState({
            sex: e.target.value
        })
    }

    hanlderChangeAge(e) {
        this.setState({
            age: e.target.value
        })
    }

    hanlderChangeHobby(e) {
        
        let hobby = this.state.hobby;
        let value = e.target.value;
        let checked = e.target.checked;
        
        hobby.map((item,index)=>{
            item.checked = item.value == value ? checked: item.checked;
        })

        this.setState(hobby);


   
    }
    render() {
        let o_option = [];
        let o_hobby = [];
        let pesstion = {};
        this.state.city.map(function(value,index){
            pesstion = {};
            pesstion = index == 0 ? <option key={index} value={index} checked>{value}</option> : <option key={index} value={index}>{value}</option>
            o_option.push(pesstion);
        });

        this.state.hobby.map((item,index)=>{
            pesstion = {}; 
            pesstion = <span key={index}><input type="checkbox" checked={item.checked} onChange={(e)=>this.hanlderChangeHobby(e)} value={item.value} name="hobby"/>{item.value}</span>
            o_hobby.push(pesstion);
        })

        return (
            <div>
                <form>
                    <div className="formItem">
                        {this.state.msg}
                    </div>
                    <div className= "formItem">
                        <label htmlFor="username">
                            姓名:
                        </label>
                        <input name="username" type="text" onChange={(e)=>this.hanlderChangeName(e)} value={this.state.username}/>
                    </div>

                    <div className= "formItem">
                        <label htmlFor="sex">
                           性別:
                        </label>
                        <input type="radio" onChange={(e)=>this.handlerChangeSex(e)} name="sex" value="1"/>男
                        <input type="radio" onChange={(e)=>this.handlerChangeSex(e)} name="sex" value="2"/>女
                    </div>

                    <div className= "formItem">
                        <label htmlFor="age">
                            年齡:
                        </label>
                        <input name="age" type="text" onChange={(e)=>this.hanlderChangeAge(e)} value={this.state.age}/>
                    </div>

                    <div className= "formItem">
                        <label htmlFor="city">
                            城市:
                        </label>
                        <select name="city">
                            {o_option}
                        </select>
                    </div>

                    <div className= "formItem">
                        <label htmlFor="hobby">
                            爱好:
                        </label>
                            {o_hobby}
                    </div>
                    <div className= "formItem">

                    </div>

                    <div className= "formItem formItem-center">
                        <button className="button button-primary" type="button">提取表单值</button>
                    </div>


                </form>
            </div>
        )

    }


}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值