好客租房37-多表单元素优化
使用一个事件处理多个元素
1给表单元素添加name属性 名称域state相同
2根据表单元素获取对应值
3在唱歌事件处理程序中通过[name]修改对应的state
//导入react
import React from 'react'
import ReactDOM from 'react-dom'
//导入组件
// 约定1:类组件必须以大写字母开头
// 约定2:类组件应该继承react.component父类 从中可以使用父类的方法和属性
// 约定3:组件必须提供render方法
// 约定4:render方法必须有返回值
class HelloWorld extends React.Component {
//初始化state
state = {
txt: '1',
content:"2",
sex:"nan",
isChecked:true
}
handleChange = (e) => {
//获取当前的dom对象
const target=e.target
//根据类型获取值
const value =target.type==="checkbox"?target.checked:target.value
//获取name
const name=target.name
this.setState({
[name]: value,
})
}
// handleChangeValue = (e) => {
// this.setState({
// value: e.target.value,
// })
// }
// handleChangeSelect = (e) => {
// this.setState({
// value: e.target.select,
// })
// }
// handleChangeCheck = (e) => {
// this.setState({
// checked: e.target.checked,
// })
// }
//抽离出来 this报错 事件处理中的this为underfine
render() {
return (
<div>
<input
type="text"
name="txt"
value={this.state.txt}
onChange={this.handleChange}
/>
<textarea name="content" onChange={this.handleChange} value={this.state.content}></textarea>
<select name="sex" onChange={this.handleChange} value={this.state.sex}>
<option value="nan">男</option>
<option value="nv">女</option>
</select>
<input
type="checkbox"
name="isChecked"
checked={this.state.isChecked}
onChange={this.handleChange}
/>
</div>
)
}
}
ReactDOM.render(<HelloWorld />, document.getElementById('root'))
运行结果