理解受控组件和非受控组件

受控组件

在HTML表单元素中,输入类的DOM,随着用户的输入,通过onChange事件和setState,将数据维护到state中,在需要时,从state中获取数据的组件,被称为受控组件

官方推荐表单尽量使用受控组件

受控组件类似于Vue中双向绑定的作用

class Login extends React.Component{
	state = {
		username:'',
		password:'' 
	}
	//保存用户名到状态中
	saveUsername = (event)=>{
		this.setState({username:event.target.value})
	}
	//保存密码到状态中
	savePassword = (event)=>{
		this.setState({password:event.target.value})
	}
	handleSubmit = (event)=>{
		// 通过state获取数据
		const {username,password} = this.state
		alert(`你输入的用户名是:${username},你输入的密码是:${password}`)
	}
	render(){
		return(
			<form onSubmit={this.handleSubmit}>
				用户名:<input onChange={this.saveUsername} type="text" name="username"/>
				密码:<input onChange={this.savePassword} type="password" name="password"/>
				<button>登录</button>
			</form>
		)
	}
}

非受控组件

与受控组件相对的,如果仅仅想要获取某个表单元素的值,并不关心他是如何改变的,可以通过获取DOM节点的方式来取值,通常使用ref,这种不依赖于state,现用现取的组件被称为非受控组件。

class Login extends React.Component{
	handleSubmit = (event)=>{
		// 通过ref获取数据,现用现取
		const {username,password} = this
		alert(`你输入的用户名是:${username.value},你输入的密码是:${password.value}`)
	}
	render(){
		return(
			<form onSubmit={this.handleSubmit}>
				用户名:<input ref={c => this.username = c} type="text" name="username"/>
				密码:<input ref={c => this.password = c} type="password" name="password"/>
				<button>登录</button>
			</form>
		)
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值