文章目录
- 收集表单数据
- 1 理解
- 2 应用
- 3 非受控组件
- 4 受控组件
收集表单数据
1 理解
包含表单的组件分类
- 受控组件
- 非受控组件
2 应用
需求:
定义一个包含表单的组件
输入用户名密码后, 点击登录提示输入信息
3 非受控组件
页面中所有输入类DOM的值,都是现用现取的
// 创建组件
class Login extends React.Component {
handleSubmit = (event) => {
event.preventDefault() // 阻止表单提交
const {username, password} = this
alert(`您输入的用户名是 ${username.value},您输入的密码是:${password.value}`)
}
render() {
return (
<form action="https://www.baidu.com/" 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>
)
}
}
// 渲染组件
ReactDOM.render(<Login />, document.getElementById('test'))
4 受控组件
页面中输入类的DOM,随着输入的过程,将数据存储在状态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) => {
event.preventDefault()
const {username, password} = this.state
alert(`您输入的用户名是 ${username},您输入的密码是:${password}`)
}
render() {
return (
<form action="https://www.baidu.com/" onSubmit={this.handleSubmit}>
用户名:<input onChange={this.saveUsername} type="text" name="username" />
密码:<input onChange={this.savePassword} type="password" name="password" />
<button>登录</button>
</form>
)
}
}
// 渲染组件
ReactDOM.render(<Login />, document.getElementById('test'))
参考:
【React】面向组件编程 - 基本理解和使用 - 组件三大核心属性state-props-refs - 事件处理 - 非受控组件 - 受控组件 - 高阶函数 - 函数柯里化