写在前面
一直听佬们说受控组件,非受控组件,他们是什么,这两者的区别是什么,本菜鸟准备一探究竟
非受控组件
直接看如何创建该组件
- 通过创建了一个input,不设置value的值,这样input的value由
DOM
本身控制 - 在需要使用的时候通过dom方法去获取value
import React, { useRef } from "react";
function App() {
const ipt = useRef()
const handleSubmit = () => {
// 在需要的时候进行获取,不能实时获取
console.log(ipt.current.value);
}
return <div className="app">
<form onSubmit={handleSubmit}>
<input type="text" ref={ipt}/>
<input type="submit"/>
</form>
</div>;
}
export default App;
受控组件
受控组件需要我们自己传入value,来表示该组件受我们自己控制,不需要通过DOM属性去获取当前值
import React, { useState } from "react";
function App() {
const [ text, setText ] = useState("");
const handleChange = (e) => {
setText(e.target.value.trim())
};
return <div className="app">
<input type="text" onChange={ handleChange }/>
</div>;
}
export default App;
其中必须传递change方法去修改value,不然react会给出报错
区别
非受控组件
不需要我们自己定义状态,实现起来稍微简单非受控组件
无法实现实时获取当前输入框的内容受控组件
需要自己定义状态,并且要实现相关更新的方法受控组件
可以控制输入内容的格式受控组件
可以根据数据条件来实现禁用等操作- 当数据由多个控制的时候由于
非受控组件
无法实时获取,无法实现相关功能
结尾
- 当处理简单的表单数据的时候,可以使用非受控组件
- 当要处理复杂的表单数据的时候,还是老老实实用受控组件