理解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 移动端实现列表左滑删除的示例代码

    react 移动端实现列表左滑删除的示例代码

    这篇文章主要介绍了react 移动端实现列表左滑删除的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • 记录React使用connect后,ref.current为null问题及解决

    记录React使用connect后,ref.current为null问题及解决

    记录React使用connect后,ref.current为null问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • React如何立即更新DOM

    React如何立即更新DOM

    这篇文章主要介绍了React如何立即更新DOM问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • react-beautiful-dnd拖拽排序功能的实现过程

    react-beautiful-dnd拖拽排序功能的实现过程

    这篇文章主要介绍了react-beautiful-dnd拖拽排序功能的实现过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • 详解使用WebPack搭建React开发环境

    详解使用WebPack搭建React开发环境

    这篇文章主要介绍了详解使用WebPack搭建React开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • 一文详解React组件API

    一文详解React组件API

    这篇文章主要介绍了React的组件API,及组件API的用法详解,文中有详细的代码示例,对学习或工作有一定的参考价值,感兴趣的同学可以阅读本文
    2023-04-04
  • 简单分析React中的EffectList

    简单分析React中的EffectList

    这篇文章主要简单分析了React中的EffectList,帮助大家更好的理解和学习使用React进行前端开发,感兴趣的朋友可以了解下
    2021-04-04
  • 浅谈React + Webpack 构建打包优化

    浅谈React + Webpack 构建打包优化

    本篇文章主要介绍了浅谈React + Webpack 构建打包优化,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • webpack手动配置React开发环境的步骤

    webpack手动配置React开发环境的步骤

    本篇文章主要介绍了webpack手动配置React开发环境的步骤,webpack手动配置一个独立的React开发环境, 开发环境完成后, 支持自动构建, 自动刷新, sass语法 等功能...感兴趣的小伙伴们可以参考一下
    2018-07-07
  • React技巧之中断map循环的方法详解

    React技巧之中断map循环的方法详解

    这篇文章主要和大家来分享一下React的技巧之如何中断map循环,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以了解一下
    2023-06-06

最新评论