理解react中受控组件和非受控组件及应用场景

 更新时间:2024年01月22日 09:07:54   作者:王 歪歪  
当涉及到React框架时,了解受控组件和非受控组件是非常重要的概念,本文主要介绍了理解react中受控组件和非受控组件及应用场景,具有一定的参考价值,感兴趣的可以了解一下

回答思路:说说受控组件–>说说非受控组件–>应用场景

受控组件:

简单来讲,就是受我们控制的组件,组件的状态全程响应外部数据
举例:

class TestComponent extends React.Component{
	constructor(props){
		super(props);
		this.state = {username:'Tom'};
	}
	render(){
		return <input name="username" value={this.state.username}></input>	
	}
}

这时候当我们在输入框输入内容时,会发现输入的内容无法显示出来,此时input标签是一个可读的状态,因为value被this.state.username所控制,当用户输入时,this.state.username不会自动更新,这样的话input的内容就不会发生变化了,想要解除被控制,可以为input标签设置onChange事件,触发的时候更新state,从而导致input框内容更新

非受控组件

简单来讲,就是不受我们控制的组件,一般情况是在初始化的时候接受外部数据,然后自己在内部存储自身状态,当需要时,可以使用ref查询DOM并查找当前值,如下:

import React,{Component} form 'react';
export class ExampleComp extedns Component{
	constructor (props){
		super(props);
		this.inputRef = React.createRef();
	}
	handleSubmit = (e) =>{
		console.log("获取input框的值为:",this.inputRef.current.value);
		e.preventDefault();
	}
	render(){
		return (
		<form onSubmit={e => this.handleSubmit(e)}>
		<input defaultValue="Tom" ref={this.inputRef} />
		<input type="submit" value="提交" />
		</form>
	)
	}
}

应用场景

大多数推荐使用受控组件来实现表单,因为受控组件表单数据由React组件负责处理,非受控组件控制能力弱,表单数据由DOM本身处理,但更加方便快捷,代码量少

特征不受控组件受控组件
一次性取值,如提交时
提交时验证
即时现场验证×
有条件地禁用提交按钮×
强制输入格式×
一个数据的多个输入×
动态输入×

受控组件与非受控组件区别

React受控组件和非受控组件之间的最大区别是组件的值是由React状态控制还是由DOM节点控制。

受控组件:

  • 受控组件依赖于状态
  • 受控组件只有继承React.Component才会有状态
  • 受控组件必须要在表单上使用onChange事件来绑定对应的事件
  • 受控组件的修改会实时映射到状态值上,此时可以对输入的内容进行校验

非受控组件:

  • 非受控组件不受状态的控制
  • 非受控组件获取数据就是相当于操作DOM,而不会更新React状态
  • 非受控组件可以很容易和第三方组件结合,更容易同时集成 React 和非 React 代码

受控组件与非受控组件优缺点

受控组件
优点

  • 容易进行验证和处理:由于组件的值由React状态控制,就可以轻松地验证和处理组件的值。例如,可以使用onChange事件验证组件的值是否满足特定的条件,更新React状态反映验证结果。
  • 有更好的可预测性:由于组件的值由React状态控制,因此组件的行为更容易预测。例如,当组件的值发生变化时,它将始终更新React状态并重新渲染,这使得应用程序更加可预测。

缺点

  • 更多的代码:由于组件的值由React状态控制,因此需要编写更多的代码来管理组件的值。这可能会导致代码更难以维护和理解。
  • 性能问题:由于每次组件的值发生变化时,它都会更新React状态并重新渲染,这可能会影响性能。如果您在处理大量数据时使用受控组件,则可能会遇到性能问题。

非受控组件

优点

  • 更快的更新:由于组件的值由DOM节点控制,因此非受控组件可以更快地更新。这使得非受控组件适用于需要高速更新的场景,例如实时搜索框。
  • 更少的代码:由于组件的值不由React状态控制,因此需要编写更少的代码来管理组件的值。这使得代码更易于维护和理解。

缺点
难以进行验证和处理:因为组件的值不由React状态控制,难以对其进行验证和处理。

  • 更少的可预测性:组件的值由DOM节点控制,因此组件的行为更难以预测。例如,当组件的值发生变化时,它不会更新React状态并重新渲染,这可能会导致应用程序的行为更加不可预测。

到此这篇关于理解react中受控组件和非受控组件及应用场景的文章就介绍到这了,更多相关react 受控组件和非受控组件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • React项目配置axios和反向代理和process.env环境配置等问题

    React项目配置axios和反向代理和process.env环境配置等问题

    这篇文章主要介绍了React项目配置axios和反向代理和process.env环境配置等问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • React条件渲染实例讲解使用

    React条件渲染实例讲解使用

    在React中,你可以创建不同的组件来封装各种你需要的行为。然后还可以根据应用的状态变化只渲染其中的一部分。React 中的条件渲染和JavaScript中的一致,使用JavaScript操作符if或条件运算符来创建表示当前状态的元素,然后让React根据它们来更新UI
    2022-11-11
  • 简谈创建React Component的几种方式

    简谈创建React Component的几种方式

    这篇文章主要介绍了创建React Component的几种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,,需要的朋友可以参考下
    2019-06-06
  • React的事件处理你了解吗

    React的事件处理你了解吗

    这篇文章主要为大家详细介绍了React的事件处理,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • Vite+React+TypeScript手撸TodoList的项目实践

    Vite+React+TypeScript手撸TodoList的项目实践

    本文主要介绍了Vite+React+TypeScript手撸TodoList的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • Iconfont不能上传如何维护Icon

    Iconfont不能上传如何维护Icon

    这篇文章主要为大家介绍了在Iconfont还是不能上传,要如何维护你的Icon,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • ReactNative之FlatList的具体使用方法

    ReactNative之FlatList的具体使用方法

    本篇文章主要介绍了ReactNative之FlatList的具体使用方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • React echarts 组件的封装使用案例

    React echarts 组件的封装使用案例

    这篇文章主要介绍了React echarts 组件的封装,本文通过示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2024-06-06
  • react学习每天一个hooks useWhyDidYouUpdate

    react学习每天一个hooks useWhyDidYouUpdate

    这篇文章主要为大家介绍了react学习每天一个hooks useWhyDidYouUpdate使用示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • React Hooks如何主动更新Hooks组件

    React Hooks如何主动更新Hooks组件

    这篇文章主要介绍了React Hooks如何主动更新Hooks组件问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11

最新评论