React 表单、处理受控表单组件、非受控组件

React 表单处理

学习目标: 能够使用受控组件的方式获取文本框

  • 使用 React 处理表单一般有两种方法
    1. 受控组件 (推荐)
    2. 非受控组件 (了解)

1. 受控表单组件

什么是受控组件? input 框自己的状态被 React 组件控制
受控组件就是被 React 的状态控制的组件
例如:将 React 的 state 与 input 框的 value 绑定在一起,由 state 的值来控制表单的值,从而保证单一数据源特性

实现步骤:
以获取文本框的值为例,受控组件的使用步骤如下:

  1. React组件的 state 中声明一个组件的状态数据
  2. 将状态数据设置为 input 标签元素的 `value`` 属性
  3. input 添加 change 事件
  4. 在事件处理程序中,通过事件对象 e 获取当前文本框的值(用户输入的值)
  5. 调用 setState 方法,将文本框的值作为 state 状态的最新值
    代码实现:
//受控组件
import React from 'react'
class InputComponent extends React.Component {
   
  state = {
   
    message: 'this is message',
  }
  inputChange = (e) => {
   
    this.setState({
    message: e.target.value })
  }
  render() {
   
    return (
      <div>
        <input
          type="test"
          value={
   this.state.message}
          onChange={
   this.inputChange}
        />
        {
   this.state.message}
      </div>
    )
  }
}
function App() {
   
  return (
    <div>
      <InputComponent />
    </div>
  )
}
export default App

2.非受控组件

声明是非受控组件?
非受控组件就是通过手动操作 Dom 的方式获取文本框的值,文本框的状态不受 React 组件的 state 中的状态控制,直接通过原生 Dom 获取输入框的值

实现步骤:

  1. 导入createRef函数
  2. 调用 createRef 函数,创建一个 ref 对象,存储到名为msgRef的实例属性中
  3. 为 input 添加 ref 属性,值位 msgRef
  4. 在按钮的事件处理程序中,通过 msgRef.current 即可拿到 input 对应的 Dom 元素,二其中的msgRef.current.value就是文本框的值
    代码实现:
import React, {
    createRef } from 'react'
class InputComponent extends React.Component {
   
  // 使用createRef产生一个存放Dom的对象容器
  msgRef = createRef()

  changeHandler = () => {
   
    console.log(this.msgRef.current.value)
  }
  render() {
   
    return (
      <>
        <input type="test" ref={
   this.msgRef} />
        <button onClick={
   this.changeHandler}>click</button>
      </>
    )
  }
}
function App() {
   
  return (
    <div>
      <InputComponent />
    </div>
  )
}
export default App

相关推荐

  1. React 处理组件组件

    2024-01-26 14:44:04       45 阅读
  2. react-

    2024-01-26 14:44:04       60 阅读
  3. react组件组件区别

    2024-01-26 14:44:04       53 阅读
  4. React组件组件区别及应用场景。

    2024-01-26 14:44:04       43 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-26 14:44:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-26 14:44:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-26 14:44:04       82 阅读
  4. Python语言-面向对象

    2024-01-26 14:44:04       91 阅读

热门阅读

  1. Nginx

    Nginx

    2024-01-26 14:44:04      35 阅读
  2. 前端demo: 将传入文件压缩到不超过指定大小(M)

    2024-01-26 14:44:04       53 阅读
  3. ubuntu 22.04 怎么安装websocat

    2024-01-26 14:44:04       56 阅读
  4. 【git】记录一个git error解决方法

    2024-01-26 14:44:04       54 阅读
  5. js中将回调地狱改装成promise方式的函数

    2024-01-26 14:44:04       53 阅读
  6. C语言sizeof 不是函数吗?

    2024-01-26 14:44:04       44 阅读
  7. YAML语法记录

    2024-01-26 14:44:04       55 阅读
  8. 关于SQLite 的下载与使用。配合python

    2024-01-26 14:44:04       60 阅读
  9. mysql面试题合集-分布式

    2024-01-26 14:44:04       54 阅读
  10. 玩转浏览器开发者工具

    2024-01-26 14:44:04       52 阅读
  11. shallowRef与shallowReactive

    2024-01-26 14:44:04       48 阅读
  12. IEC60870-5-104规约

    2024-01-26 14:44:04       48 阅读