const log = (...value) => console.log(...value)
import ReactDOM from 'react-dom'
import React, { Component, PropTypes } from 'react'
class NameForm extends Component {
constructor(props) {
super(props)
this.state = {
value: ''
}
}
// 实时修改表单值
handleChange (event) {
this.setState({value: event.target.value})
}
handleSubmit (event) {
log(this.state.value)
event.preventDefault()
}
bind (fn) {
return fn.bind(this)
}
render () {
const handleChange = this.bind( this.handleChange )
const handleSubmit = this.bind( this.handleSubmit )
return (
<form onSubmit={handleSubmit}>
<p>{this.state.value}</p>
<label>
Name: <input type="text" value={this.state.value} onChange={handleChange} />
</label>
<input type="submit" value="Submit" />
</form>
)
}
}
ReactDOM.render(
<NameForm />,
document.querySelector('#box')
)
const log = (...value) => console.log(...value)
import ReactDOM from 'react-dom'
import React, { Component, PropTypes } from 'react'
class EssayForm extends Component {
constructor(props) {
super(props)
this.state = {
value: '内容'
}
}
handleChange (event) {
this.setState({value: event.target.value})
}
handleSubmit (event) {
log(this.state.value)
event.preventDefault()
}
render () {
return (
<form onSubmit={this.handleSubmit.bind(this)}>
<lable>
Name:
<textarea value={this.state.value} onChange={this.handleChange.bind(this)}></textarea>
</lable>
<input type="submit" value="Submit" />
</form>
)
}
}
ReactDOM.render(
<EssayForm />,
document.querySelector('#box')
)
const log = (...value) => console.log(...value)
import ReactDOM from 'react-dom'
import React, { Component, PropTypes } from 'react'
class FlavorForm extends Component {
constructor (props) {
super(props)
this.state = {value: 'coconut'}
}
handleChange (event) {
this.setState({value: event.target.value})
}
handleSubmit (event) {
log(this.state.value)
event.preventDefault()
}
render () {
// select 通过 value 控制select选中
return (
<form onSubmit={this.handleSubmit.bind(this)}>
<label>
<select value={this.state.value} onChange={this.handleChange.bind(this)}>
<option value="coconut">coconut</option>
<option value="小花">小花</option>
<option value="小蓝">小蓝</option>
<option value="小白">小白</option>
</select>
</label>
<input type="submit" value="Submit" />
</form>
)
}
}
ReactDOM.render(
<FlavorForm />,
document.querySelector('#box')
)
const log = (...value) => console.log(...value)
import ReactDOM from 'react-dom'
import React, { Component, PropTypes } from 'react'
// 处理多个输入 给表单添加 name 通过属性表达式控制
class Reservation extends Component {
constructor(props) {
super(props)
this.state = {
isGoing: true,
numberOfGuests: 2
}
}
handleInputChange (event) {
const target = event.target
const value = target.type === 'checkbox' ? target.checked : target.value
const name = target.name
// 通过setState 改变表单值
this.setState({
[name]: value
})
}
/**
* 即时场验证
* 有条件地禁用提交按钮
* 执行输入格式
* 一个数据的几个输入
* 动态输入
这些最好都使用受控组件
*/
render () {
return (
<form>
<label>
<input
// 给表单添加name 改变表单值 否则表单没变化
name="isGoing"
type="checkbox"
checked={this.state.isGoing}
// 必须监听 onChange 事件
onChange={ this.handleInputChange.bind(this) }
/>
</label>
<label>
<input
// 给表单添加name 改变表单值
name="numberOfGuests"
type="number"
value={this.state.numberOfGuests}
// 必须监听 onChange 事件
onChange={ this.handleInputChange.bind(this) }
/>
</label>
</form>
)
}
}
ReactDOM.render(
<Reservation />,
document.querySelector('#box')
)