# 受控组件的概念:
在 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时,这个时候我们是没办法将其作为受控组件的,因为选择文件本身就是一个非受控的操作,只能获取用户选的文件