非受控組件:值不會自動更新
※非受控組件
※
class FormPractice1 extends React.Component {
constructor(p) {
super(p)
this.handleSubmit = this.handleSubmit.bind(this)
}
handleSubmit(e) {
e.preventDefault() // 阻止提交
alert(this.fname.value)
alert(this.fpassword.value)
// document.getElementsByTagName("form")[0].submit() // 提交
}
render() {
return (
<form action="xxx" onSubmit={this.handleSubmit}>
<input name="name" ref={i => this.fname = i} />
<input type="password" name="password" ref={i => this.fpassword = i} /><br />
<input type="submit" value="提交" />
</form>
)
}
}
ReactDOM.render(<FormPractice1 />, document.querySelector("#div1"));
※
※受控組件
※
class FormPractice1 extends React.Component {
constructor(p) {
super(p)
this.state = {
name:'',
pwd:''
}
this.handleSubmit = this.handleSubmit.bind(this)
this.handleChangeName = this.handleChangeName.bind(this)
this.handleChangePwd = this.handleChangePwd.bind(this)
}
handleSubmit(e) {
e.preventDefault() //阻止提交
alert(`名稱:${this.state.name} 密碼:${this.state.pwd}`)
// document.getElementsByTagName("form")[0].submit() // 提交
}
handleChangeName(e) {
this.setState({
name:e.target.value
})
}
handleChangePwd(e) {
this.setState({
pwd: e.target.value
})
}
render() {
return (
<form action="xxx" onSubmit={this.handleSubmit}>
<input name="name" value={this.state.name} onChange={this.handleChangeName} />
<input type="password" name="password" value={this.state.pwd} onChange={this.handleChangePwd} /><br />
<input type="submit" value="提交" />
</form>
)
}
}
ReactDOM.render(<FormPractice1 />, document.querySelector("#div1"));
※如果不寫事件,鍵盤打不進去
※onChange 在 React 裡,只要打完字就馬上更新了
沒有留言:
張貼留言