小白一看就会的React学习笔记 三( 受控表单,非受控表单)

127 阅读2分钟

表单处理

目标任务:  能够使用受控组件的方式获取文本框的值

使用React处理表单元素,一般有俩种方式:

  1. 受控组件 (推荐使用)
  2. 非受控组件 (了解)

1. 受控表单组件

什么是受控组件?  input框自己的状态被React组件状态控制

React组件的状态的地方是在state中,input表单元素也有自己的状态是在value中,React将state与表单元素的值(value)绑定到一起,由state的值来控制表单元素的值,从而保证单一数据源特性

实现步骤

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

  1. 在组件的state中声明一个组件的状态数据
  2. 将状态数据设置为input标签元素的value属性的值
  3. 为input添加change事件,在事件处理程序中,通过事件对象e获取到当前文本框的值(即用户当前输入的值
  4. 调用setState方法,将文本框的值作为state状态的最新值 自我感觉就像vue的双向绑定一样 v-model, react是拿到输入框的 e.target.value,然后赋值给state中的值

image.png

2. 非受控表单

什么是非受控组件?

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

实现步骤

  1. 导入createRef 函数
  2. 调用createRef函数,创建一个ref对象,存储到名为msgRef的实例属性中
  3. 为input添加ref属性,值为msgRef
  4. 在按钮的事件处理程序中,通过msgRef.current即可拿到input对应的dom元素,而其中msgRef.current.value拿到的就是文本框的值

image.png

总结

**二者的区别 就是 **

- 受控表单 就是 通过输入框的 输入框的 e.target.value 获取的值

- 非受控表单就是 首先要引入createRef 函数, 然后通过 `msgRef.current 拿到 对应的 dom .value拿到值