非授控组件
使用ref来从 DOM 节点中获取表单数据
表单数据将交由 DOM 节点来处理
非授控组件:先用先取
class Login extends React.Component {
getSubmit=()=>{
event.preventDefault()
alert(`用户名:${this.ipt.value},密码:${this.iptT.value}`)
}
render() {
return (
<form action="https://developer.mozilla.org/" onSubmit={this.getSubmit}>
姓名:<input ref={(a)=>{this.ipt=a}} type="text" name="username"/>
密码:<input ref={(b)=>{this.iptT=b}} type="password" name="password"/>
<button>登录</button>
</form>
)
}
}
ReactDOM.render(<Login/>,document.getElementById("react"))
授控组件
表单组件的状态/数据只由state 维护 修改只能通过setState()来更新,
表单数据是由 React 组件来管理
class Login extends React.Component {
state={username:'', password:''}
getUserName=(event)=>{
const {username} =this.state
this.setState({username:event.target.value})
}
getPassWord=(event)=>{
const {password} =this.state
this.setState({password:event.target.value})
}
getSubmit=()=>{
event.preventDefault()
const {password,username} =this.state
alert(`姓名${username},密码${password}`)
}
render() {
return (
<form onSubmit={this.getSubmit}>
姓名:<input onChange={this.getUserName} type="text" name="username"/>
<h2>{this.state.username}</h2>
密码:<input onChange={this.getPassWord} type="password" name="password"/>
<h2>{this.state.password}</h2>
<button>登录</button>
</form>
)
}
}
ReactDOM.render(<Login/>,document.getElementById("react"))
授控组件用高阶函数与函数柯里化写法
class Login extends React.Component {
state={username:'', password:''}
getData=(data)=>{
return (event)=>{
return this.setState({
[data]:event.target.value
})
}
}
getSubmit=()=>{
event.preventDefault()
const {username,password} =this.state
alert(`姓名${username},密码${password}`)
}
render() {
return (
<form onSubmit={this.getSubmit}>
{}
姓名:<input onChange={this.getData("username")} type="text" name="username"/>
<h2>{this.state.username}</h2>
密码:<input onChange={this.getData("password")} type="password" name="password"/>
<h2>{this.state.password}</h2>
<button>登录</button>
</form>
)
}
}
ReactDOM.render(<Login/>,document.getElementById("react"))
授控组件不用函数柯里化的写法
class Login extends React.Component {
state={username:'', password:''}
getData=(datatest,e)=>{
this.setState({[datatest]:e})
}
getSubmit=()=>{
event.preventDefault()
const {username,password} =this.state
alert(`姓名${username},密码${password}`)
}
render() {
return (
<form onSubmit={this.getSubmit}>
{}
姓名:<input onChange={(event)=>{return this.getData("username",event.target.value)}} type="text" name="username"/>
<h2>{this.state.username}</h2>
密码:<input onChange={event=>this.getData("password",event.target.value)} type="password" name="password"/>
<h2>{this.state.password}</h2>
<button>登录</button>
</form>
)
}
}
ReactDOM.render(<Login/>,document.getElementById("react"))