在ReactJS中什么是受控组件和非受控组件?它们之间有什么不同?
当前回答
TLDR;
https://www.youtube.com/watch?v=6L2Rd116EvY 你可以查看那一页,他解释得很好.......
控制组件
受控组件是呈现表单元素的组件,例如<input/>,其值由react和react单独控制。例如,复制下面的代码并尝试在DOM中更改输入字段…
export default function Component() {
return (
<div>
<input type="text" value="somevalue" />
</div>
)
}
无论你如何尝试更新上面输入的值,react都不会让你这么做。因为react想要成为一个使用状态来控制更新值的人,因此title controlled…
它的值可以通过连接属性onChange和value到一个状态来更新,如下所示。
function Component() {
const [text,setText] = React.useState("")
return (
<div>
<input type="text" onChange={(e)=>setText(e.target.value)} value={text} />
<p>{text}</p>
</div>
)
}
现在我们的输入和它的值可以被更新,用来渲染一些东西或执行即时验证....
不受控制的组件
非受控组件是呈现<input/>这样的表单元素的组件,其值可以由Dom元素处理,受控和非受控之间的一个主要区别是值属性定义。对于不受控制的,我们有一个defaultValue代替或根本没有值。
function Component() {
return (
<div>
<input type="email" id="message" defaultValue="example@mail.com" />
</div>
)
}
上面输入的值可以被改变,并由DOM控制,而不需要React…
建议在react中更多地使用受控组件,因为您可以执行即时验证和强制动态输入。
其他回答
受控制的组件不保持它们的状态。
它们需要的数据从父组件传递给它们。
它们通过回调函数与这些数据交互,回调函数也从父进程传递给子进程。
受控组件主要是那些组件的道具值来自父组件或来自存储的组件(如redux的情况)。例子:
<ControlledComp value={this.props.fromParent}/>
对于不受控制的组件,可以根据事件处理从组件的状态中获取组件值。例子:
<UncontrolledComp value={this.state.independentValue}/>
受控组件是React中做事的首选方式。
它允许我们将所有组件的状态保持在React状态,而不是依赖DOM通过其内部状态来检索元素的值。
受控组件是从状态中派生其输入值的组件。
受控组件:表单数据由React组件处理。
ReactJS中受控组件的流程 图像
不受控组件:表单数据由DOM本身处理。
ReactJS中未受控组件的流 图像
受控组件是从回调函数获取更改值的组件 而且 未受控组件是拥有来自DOM的组件。 例如, 当输入值发生变化时,我们可以使用受控组件中的onChange函数 我们也可以使用像ref这样的DOM来获取值。
推荐文章
- 什么是React受控组件和不受控组件?
- npm犯错!代码UNABLE_TO_GET_ISSUER_CERT_LOCALLY
- 反应-显示加载屏幕,而DOM是渲染?
- 如何解决“不能在模块外使用导入语句”在开玩笑
- 是否有可能在react渲染函数中返回空?
- 使用Redux而不是Flux的缺点是什么
- 反应:为什么当道具改变时子组件不更新
- React vs ReactDOM?
- Axios -删除请求与请求体和头?
- “react-scripts”不被视为内部或外部命令
- 如何从状态数组中删除一个项目?
- 是否可以用if…else…语句在React渲染函数?
- 如何设置默认的复选框ReactJS?
- 反应。类型无效——期望为字符串
- 如何动态地将一个类添加到手动类名?