React

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript类库 > React > react 受控组件和非受控组件

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

作者:王 歪歪

当涉及到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状态控制,难以对其进行验证和处理。

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

您可能感兴趣的文章:
阅读全文