Reactフレームワーク、
複数のFormから値を取得する
について解説です。
間違った記述をしてしまうとこんな感じになります
下記のように正しい記述ができるよう解説をしていきます
「複数のフォームから値を取得する」イメージ動画
コード
import React from "react"
class App extends React.Component{
constructor(){
super()
this.state = {
firstName: "",
lastName: "",
}
this.handleChange = this.handleChange.bind(this)
}
handleChange(e) {
const {name, value} = e.target
this.setState({
[name]: value
})
}
render(){
return (
<form>
<input
type="text"
name="firstName"
value={this.state.firstName}
placeholder="First Name"
onChange={this.handleChange}
/>
<input
type="text"
name="lastName"
value={this.state.lastName}
placeholder="Last Name"
onChange={this.handleChange}
/>
<h1>{this.state.firstName} {this.state.lastName}</h1>
</form>
)
}
}
export default App
解説
全てはここにあり!
handleChange(e) {
const {name, value} = e.target
this.setState({
[name]: value
})
}
const {name, value} = e.target
e.targetから「name」、「value」を取り出し、
[name]: value
それぞれのname変数にvalueを格納する
注意点としては、
<input
type="text"
name="firstName"
value={this.state.firstName}
placeholder="First Name"
onChange={this.handleChange}
/>
<input
type="text"
name="lastName"
value={this.state.lastName}
placeholder="Last Name"
onChange={this.handleChange}
/>
<input />内のnameに、this.stateのキーと同じ名前を指定すること
それにより、
[name]:value
が成り立ち、this.stateの値も正しく変更が反映されます
まとめ
一度この記述を覚えれば、次からは問題ないと思います
ポイントは、
{name, value} = e.target
と、
this.state({[name]:value})
です
ぜひここでマスターしてしまいましょう!