React --- 收集表单数据(非受控组件和受控组件)

Posted So istes immer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了React --- 收集表单数据(非受控组件和受控组件)相关的知识,希望对你有一定的参考价值。

目录

需求:定义一个包含表单的组件,输入用户名密码后,点击登录提示输入信息(页面不刷新)

1.非受控组件

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8"></meta>
    <title></title>
  </head>
  <body>
    <div id="test"></div>

    <script type="text/javascript" src="../js/react.development.js"></script>
    <script type="text/javascript" src="../js/react-dom.development.js"></script>
    <script type="text/javascript" src="../js/babel.min.js"></script>

    <script type="text/babel">
      class Login extends React.Component 
        handleSubmit = (event) => 
          event.preventDefault()
          const username,password = this
          alert(`你输入的用户名是:$username.value,你输入的密码是:$password.value`)
        
        render() 
          return (
            <form onSubmit=this.handleSubmit>
              用户名:<input ref=c => this.username = c type="text" name="username"/>
              密码:<input ref=c => this.password = c type="password" name="password"/>
              <button>登录</button>
            </form>
          )
        
      
      ReactDOM.render(<Login/>, document.getElementById('test'))
    </script>
  </body>
</html>

2.受控组件

对于这种像input这样输入类的DOM,随着用户的输入,输入的数据被维护在状态state里,等需要用的时候再从状态state里面取出来

类似于Vue中的双向数据绑定

受控组件的优势在于:比上面的非受控组件少用了refs

<script type="text/babel">
  class Login extends React.Component 
    //保存用户名和密码到状态中
    saveUsername = (event) => 
      this.setState(username: event.target.value)
    
    savePassword = (event) => 
      this.setState(password: event.target.value)
    
    handleSubmit = (event) => 
      event.preventDefault()
      const username,password = this.state
      alert(`你输入的用户名是:$username,你输入的密码是:$password`)
    
    render() 
      return (
        <form onSubmit=this.handleSubmit>
          用户名:<input onChange=this.saveUsername type="text" name="username"/>
          密码:<input onChange=this.savePassword type="password" name="password"/>
          <button>登录</button>
        </form>
      )
    
  
  ReactDOM.render(<Login/>, document.getElementById('test'))
</script>

以上是关于React --- 收集表单数据(非受控组件和受控组件)的主要内容,如果未能解决你的问题,请参考以下文章

react 表单(受控组件和非受控组件)

什么是 React 受控组件和非受控组件?

React -- 受控组件和非受控组件

react-生命周期

React中的受控组件和非受控组件

表单数据的搜集和react组件的生命周期