react中的受控和非受控组件

2022/6/8 React

# 受控组件的概念:

在 HTML 中,表单元素(如<input><textarea><select>)通常自己维护 state,并根据用户输入进行更新。而在 React 中,可变状态(mutable state)通常保存在组件的 state 属性中,并且只能通过使用 setState()来更新。我们可以把两者结合起来,使 React 的 state 成为“唯一数据源”。渲染表单的 React 组件还控制着用户输入过程中表单发生的操作。被 React 以这种方式控制取值的表单输入元素就叫做“受控组件”。

# 非受控组件:

要编写一个非受控组件,而不是为每个状态更新都编写数据处理函数,你可以 使用 ref 来从 DOM 节点中获取表单数据。

# 特殊的文件file标签:

另外在input中还有一个比较特殊的情况,那就是file类型的表单控件。 对于file类型的表单控件它始终是一个不受控制的组件,因为它的值只能由用户设置,而不是以编程方式设置。

# 总结:

  • 受控和非受控的区别在于是否把原生的表单中的 state 交给 react组件的state来接管
  • 大多数业务场景都应该使用受控组件(官方也是这么推荐的)
  • 当然如果 input的type是file时,这个时候我们是没办法将其作为受控组件的,因为选择文件本身就是一个非受控的操作,只能获取用户选的文件

受控组件文档地址: (opens new window)

非受控组件文档地址: (opens new window)

Last Updated: 2022/8/13 下午12:28:10