在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本身处理,但更加方便快捷,代码量少

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

相关推荐

  1. React组件组件区别及应用场景

    2024-01-22 15:24:03       19 阅读
  2. react组件组件区别

    2024-01-22 15:24:03       37 阅读
  3. React组件组件

    2024-01-22 15:24:03       16 阅读
  4. React 表单、处理表单组件组件

    2024-01-22 15:24:03       26 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-22 15:24:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-22 15:24:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-22 15:24:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-22 15:24:03       18 阅读

热门阅读

  1. 问题解决:django模型查询报错,找不到数据库表

    2024-01-22 15:24:03       37 阅读
  2. 集齐用 channel 把 Go 程序写崩的三种姿势~

    2024-01-22 15:24:03       25 阅读
  3. 【webrtc】跟webrtc学时间戳、序号类型转换

    2024-01-22 15:24:03       27 阅读
  4. lc142.环形链表Ⅱ

    2024-01-22 15:24:03       37 阅读
  5. Golang leetcode459 拼接+kmp算法

    2024-01-22 15:24:03       34 阅读
  6. 三、需求规格说明书(软件工程示例)

    2024-01-22 15:24:03       36 阅读
  7. 二分答案刷题4

    2024-01-22 15:24:03       38 阅读
  8. docker 脚本安装

    2024-01-22 15:24:03       31 阅读
  9. 基于asio的httpclient实现

    2024-01-22 15:24:03       34 阅读
  10. 【Linux】进程退出和进程等待

    2024-01-22 15:24:03       27 阅读