React之受控组件和非受控组件

1、受控组件(建议使用)

  1. 定义:存在表单元素的组件,表单元素的值会随着用户的输入,自动存放在state里面。
  2. 亮点:1、使用onChange事件;2、不会滥用ref,这也是React官方文档所提倡的。
import React from 'react';
interface Props {}
interface State {
    username:string;
    password:string;
}
class Form extends Component<Props, State> {
	state = {
		username: '',
		password: '',
	}
	saveData = (dataType) => {
		return((event)=>{
			this.setState{ [dataType]: event.target.value }
		})		
	}
	submit = (event) => {
		event.preventDefault()
		const { username, password } = this.state
		console.log(`用户名:${username}, 密码:${password}`)
	}
	render() {
		return(
			<form onSubmit={this.submit}>
			用户名:<input type="text" name="username" onChange={this.saveData('username')}/>
			密码:<input type="password" name="password" onChange={this.saveData('password')}/>
			<button>登录</button>
			</form>
		)
	}
}
export default Form

2、非受控组件

  1. 定义:存在表单元素的组件,表单元素的值只有在需要被调用时,才会被使用,通俗讲,即”现用现取“。
import React from 'react';
interface Props {}
interface State {}
class Form extends Component<Props, State> {
  refs: any = React.createRef()
  state = {}
  submit = (event) => {
  	event.preventDefault()
  	const username = this.refs.username.value
  	const password = this.refs.password.value
  	console.log(`用户名:${username}, 密码:${password}`)
  }
  render() {
  	return(
  		<form onSubmit={this.submit}>
  		用户名:<input type="text" name="username" ref='username'/>
  		密码:<input type="password" name="password" ref='password' />
  		<button>登录</button>
  		</form>
  	)
  }
}
export default Form
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值