zoukankan      html  css  js  c++  java
  • React——from

    React中HTML的from元素与其他的DOM元素有些不同。因为表单元素自然而然的会有一些内部状态

    一.controlled components

    在HTML中,像input,select,textarea这些表单元素都会维持自己的状态,并且会基于用户输入更新状态。在React中,易变的状态通常保存在组件的state属性中,并且 使用setState()方法去更新。如果一个表单元素的值被React控制,那么这个组件就称为'controlled components' 在controlled component中,每一个state都有一个关联的handler方法,通过它可以直接的修改或者验证用户输入

    class NameFrom extend React.Component{
        constructor(props){
            super(props);
            this.state = {name:''}
        }
        handleSubmit(event){
            console.log(this.state.name);
            event.preventDefault();
        }
        handleChange(event){
            console.log(this.state.name);
            this.setState({
                name:event.target.value
            });
        }
        render(){
            return (
                <from onSubmit={this.handleSubmit.bind(this)}>
                    <input type='text' name='name' value={this.state.name} onChange={this.handleChange.bind(this)}/><br>
                    <input type='submit' value='submit'>
                </from>
            )
        }
    };
    

     二.textarea 标签

    HTML中,textarea的文本信息定义在它的子元素中

    <textarea>there are text</textarea>
    

     在React中,textarea的文本信息用value属性定义.所以在表单中,textarea的写法与单行文本非常相似

    .select 标签

    React中在select元素上设置value属性,表示被选中的选项

    .处理多个input

    当你需要处理多个controlled的input元素,你可以在每一个input元素上设置一个name属性,并且在handler函数中根据event.target.name的值去做不同的操作

    class MyFrom extend React.Component{
        constructor(props){
            super(props);
            this.state = {
                name:'',
                age:''
            };
        }
        handleChange(event){
            let name = event.target.name;
            this.setState({
                [name]:event.target.value
            });
            console.log(this.state);
        }
        render(){
            return (
                <from>
                    <input type='text' name='name' value={this.state.name} onChange={this.handleChange.bind(this)}/>
                    <input type='text' name='age' value={this.state.age} onChange={this.handleChange.bind(this)}/>
                </from>
            )
        }
    }
    

     .Uncontrolled Components

    推荐在大多数时候都使用controlled Component实现表单,在controlled Component中,表单数据被react组件控制,在uncontrolled component中,数据被
    DOM自己控制。在uncontrolled component中不需要为每一个要更新的state写一个handler函数,而是通过refDOM中得到表单数据

    class Uncontrolled extend React.Component{
        constructor(props){
                super(props);
        }
        handleSubmit(event){
            console.log(this.input.value);
            event.preventDefault();
        }
        refFunc(input){
            this.input = input;
        }
        render(){
            return (
                <from onSubmit={this.handleSubmit.bind(this)}>
                <input type='text' name='name' ref={this.refFunc.bind(this)}/>
                <input type='submit' value='提交'/>
                </from>
            )
        }
    }
    

     如果在一个Uncontrolled Components上设置value属性会让该组件的成为一个只读组件,如果想给Uncontrolled <input type='text'>
    设置初始值可以使用defaultValue属性
    <input type="checkbox"> 和 <input type="radio"> 使用 defaultChecked, <select> and <textarea> 使用 defaultValue.

  • 相关阅读:
    sqlserver把小数点后面多余的0去掉
    C#使用Linq对DataGridView进行模糊查找
    winform dataGridView DataGridViewComboBoxColumn 下拉框事件
    JGit与远程仓库链接使用的两种验证方式(ssh和https)
    Quartz不用配置文件配置启动
    SpringBoot之退出服务(exit)时调用自定义的销毁方法
    Java注解Annotation
    Java自定义数据验证注解Annotation
    我的ehcache笔记
    Java中泛型Class<T>、T与Class<?>
  • 原文地址:https://www.cnblogs.com/QxQstar/p/7532574.html
Copyright © 2011-2022 走看看