受控组件vs非受控组件(input为例)

表单可以说是一个web应用里面的核心组件之一了,如何操作表单也是一个前端的基础。 以表单组件input 来说,我对受控和非受控组件的理解如下。
非受控的组件input它的值是来自于dom本身,在react 中是用ref 获取dom然后拿到它的value
代码如下

import React from 'react';
class Demo extends React.Component{
    handleSubmit () {
        const val = this.myInput.value;
        console.log(val)
    }  
    render(){
        return (
                <div>
                  <input ref={element=>this.myInput=element}/>
                  <button onClick={this.handleSubmit}>click me</button>
                <div/>
              )
}

以上代码就是通过获取ref 然后拿到input的值。
另一种就比较 React了,用props的方式,组件input 的值是来自于props

import React from 'react';
class Demo1 extends React.Component{
    this.state = {
          value:' '
    }
    onChange (e) {
        const value = e.currentTarget.value;
         this.setState({value:value});
    }  
    render(){
        const { value } = this.state;
        return (
                <div>
                  <input value={value} onChange={e=>this.onChange(e)}/>
                  <button disabled={value.length <6 }>click me</button>
                <div/>
              )
}

这个input的值是由state来控制的,那么在任何时候你都可以对输入的值进行控制,所以叫受控组件;
在上面的例子中,假设字符串长度小于6就无法提交,那么,在你输入不达标的时候,你的按钮都是处于无法点击的状态。

基本上来讲,这些概念也可以用于其他的表单组件(radio,select 等等)
参考:https://goshakkk.name/controlled-vs-uncontrolled-inputs-react/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • It's a common pattern in React to wrap a component in an ...
    jplyue阅读 3,312评论 0 2
  • 3. JSX JSX是对JavaScript语言的一个扩展语法, 用于生产React“元素”,建议在描述UI的时候...
    pixels阅读 2,891评论 0 24
  • 原教程内容详见精益 React 学习指南,这只是我在学习过程中的一些阅读笔记,个人觉得该教程讲解深入浅出,比目前大...
    leonaxiong阅读 2,860评论 1 18
  • 本笔记基于React官方文档,当前React版本号为15.4.0。 1. 安装 1.1 尝试 开始之前可以先去co...
    Awey阅读 7,807评论 14 128
  • 学武,要么有钱,要么有缘。 蹲起:午100+晚100,肌肉不累,里面累的感觉,心脏砰砰砰的跳,颈椎有点痛,后背有点...
    弯月长虹阅读 155评论 0 0