美文网首页
React 可控不可控组件

React 可控不可控组件

作者: 耳_总 | 来源:发表于2017-04-04 22:36 被阅读373次
拿到组件的节点

通过ref属性,然后调用React.findDOMNode("ref_name");

var FormComponet = React.createClass({

    handleSubmit:function () {
        e.preventDefault();
        // React.findDOMNode("input_name");
        //react里面的写法 ref类似于id
        var text =  this.refs.input_name.value;
    },

    render:function () {
        return <form onSubmit={this.handleSubmit}>
            <input type="text" ref="input_name" defaultValue="Hello..."/>
        </form>
    }
})
ReactDOM.render(<FormComponet name="I Love You"/>,document.getElementById("mydiv"));

可控组件如果要想拿到节点的数据,是通过操作DOM来拿数据。

不可控组件
//不可控组件 类似于MVVM data binding
var FormComponet = React.createClass({

    getInitialState:function () {
        return {text:''}
    },

    handleSubmit: function (e) {
        e.preventDefault();
        // React.findDOMNode("input_name");
        //react里面的写法 ref类似于id
        // var text = this.refs.input_name.value;
        alert(this.state.text);
    },
    handleChange:function (e) {
        this.setState({text:e.target.value})
    },

    render: function () {
        return <form onSubmit={this.handleSubmit}>
            <input type="text" onChange={this.handleChange} defaultValue="Hello..." ref="input_name"/><br/>
            <button type="submit">提交</button>
        </form>
    }
})

不可控组件是将节点的值保存到state中,在需要的时候从state中获取。实质上是通过事件监听进行数据绑定。

事件处理函数的复用

1、通过bind函数

var FormComponet = React.createClass({

    handleSubmit: function (e) {
        e.preventDefault();
        // React.findDOMNode("input_name");
        //react里面的写法 ref类似于id
        // var text = this.refs.input_name.value;
        console.log(this.state);
    },

    getInitialState:function () {
        return {
            username:'',
            gender:0,
            agree:false
        }
    },

    handleChange:function (key,e) {
        //key为bind(this,'')函数的第一个参数,为组件的对象,第二个参数是key的别名
        e.preventDefault();
        // alert(key);
        var obj = {}
        obj[key] = e.target.value;
        this.setState(obj);
    },

    render: function () {
        return <form onSubmit={this.handleSubmit}>
            <label htmlFor="username">请输入用户名:</label>
            <input id="username" type="text" onChange={this.handleChange.bind(this,'username')}/><br/>
            <label htmlFor="gender">请选择性别:</label>
            <select id="gender" onChange={this.handleChange.bind(this,'gender')}>
                <option value="0">男</option>
                <option value="1">女</option>
            </select><br/>
            <label htmlFor="agree">是否同意:</label>
            <input id="agree" type="checkbox" onChange={this.handleChange.bind(this,'agree')}/><br/>
            <button type="submit">提交</button>
        </form>
    }
})

2、通过name 的属性的值,通过e.target.name拿到组件再拿到内容

var FormComponet = React.createClass({

    handleSubmit: function (e) {
        e.preventDefault();
        // React.findDOMNode("input_name");
        //react里面的写法 ref类似于id
        // var text = this.refs.input_name.value;
        console.log(this.state);
    },

    getInitialState:function () {
        return {
            username:'',
            gender:0,
            agree:false
        }
    },

    handleChange:function (e) {
        //key为bind(this,'')函数的第一个参数,为组件的对象,第二个参数是key的别名
        e.preventDefault();
        // alert(key);
        var obj = {}
        obj[e.target.name] = e.target.value;
        this.setState(obj);
    },

    render: function () {
        return <form onSubmit={this.handleSubmit}>
            <label htmlFor="username">请输入用户名:</label>
            <input id="username" type="text" name="username" onChange={this.handleChange}/><br/>
            <label htmlFor="gender">请选择性别:</label>
            <select id="gender" onChange={this.handleChange} name="gender">
                <option value="0">男</option>
                <option value="1">女</option>
            </select><br/>
            <label htmlFor="agree">是否同意:</label>
            <input id="agree" type="checkbox" onChange={this.handleChange} name="agree"/><br/>
            <button type="submit">提交</button>
        </form>
    }
})
ReactDOM.render(<FormComponet name="I Love You"/>, document.getElementById("mydiv"));

相关文章

  • React 可控不可控组件

    拿到组件的节点 通过ref属性,然后调用React.findDOMNode("ref_name"); 可控组件如果...

  • ReactJS_14 表单的可控组件和不可控组件

    可控组件和不可控组件: 在React中的input标签是有些小坑的,input本身就有自己的缓存机制,然后Reac...

  • 可控组件与不可控组件

    核心区别:值与state是否对应。 可控组件的好处: 复合React数据流 数据在state中,修改跟使用更加方便...

  • 表单与可控组件不可控组件

    在react中,不能像在Vue中那样双向数据绑定,来动态的响应数据的变化,所以在操作表单的时候需要我们手动操作。 ...

  • 受控组件

    受控组件 受控组件:组件的状态是可控制的 非受控组件:组件的状态是不可控制的 小练习:实现输入框输入,同步显示在下...

  • 可控和不可控

    因为安全感的缺失,一般,大家都喜欢可控的东西。 比如找工作,会担心: 能不能融入团队?会不会有办公室政治?不知道...

  • 可控与不可控

    可控是一种结果,也是一个过程。说明准备充分,万事周到。就算有预料之外之事,也有应对之策。 一旦事情到了不可控的地步...

  • 可控和不可控

    昨天小组在进行教练与被教练对话时,两位老师说到面临的“挑战”是一样的,线上教学学生的参与度不尽人意。 我们的生源都...

  • 可控与不可控

    今天阅读《绩效跃迁地图》的时候读到合约可控还是不可控时感触颇深。 记得我刚开始做教练时,因为本身是咨询...

  • 可控

    谨记: 身材要可控 生活要可控 情绪也要可控

网友评论

      本文标题:React 可控不可控组件

      本文链接:https://www.haomeiwen.com/subject/igpzottx.html