1 绑定事件
---------------------------------- 1 说明 ------------------------------------------
1 所有事件, 都以 on开头 (包括自定义事件)
2 类组件: this.xx 访问事件 / hh = () => {} 定义事件
3 函数式组件: xx 访问事件 / const hh = () => {} 定义事件
4 阻止默认事件等方式 --> 也是通过事件对象, 调用原生的 API 来处理
5 函数式组件中的, 方法可以定义在外部, 但是无法使用 props
---------------------------------- 2 ES5 事件方法 ------------------------------------------
a1(e) {}
<button onClick={this.a1.bind(this)}> 测试 1 </button>
a2(a, b, c) {}
<button onClick={this.a2.bind(this, 1, 2)}> 测试 2 </button>
h1() {}
<button onClick={()=>this.h1()}> 测试 1 </button>
h2(e) {}
<button onClick={(e)=>this.h2(e)}> 测试 2 </button>
h3(e, a, b) {}
<button onClick={(e)=>this.hh3(e, 1, 2)}> 测试 3 </button>
<button onClick={ (e)=>{console.log(e)} }> 测试 1 </button>
---------------------------------- 3 ES6 事件方法 (推介) ------------------------------------------
k1 = () => {}
<button onClick={this.k1}> 测试 1 </button>
k2 = e => {}
<button onClick={this.k2}> 测试 2 </button>
k3 = (e, a, b) => {}
<button onClick={this.k3.bind(this, 1, 2, 3)}> 测试 2 </button>
2 表单说明
1 通常把表单分为俩种 --> 受控表单 + 非受控表单
### 受控表单
-------------------------------------------------------------------------------------
<input type="text" value={this.state.msg}>
-------------------------------------------------------------------------------------
### 非受控表单 --> 通过 ref 获取 DOM 或组件 -> 然后使用原生 DOM 方式来获取表单元素值
3 表单处理
1 受控组件 --> 使用步骤 (文本框和文本段落的示例)
----------------------------------------------------------------------------
1 state = {msg: ''}
2 <input type="text" value={this.state.msg}>
3 <input type="text" value={this.state.msg} onChange={e => this.setState({txt: e.target.value})}>
----------------------------------------------------------------------------
2 受控组件 --> 下拉框 (Demo)
----------------------------------------------------------------------------
1 state = {msg: 'bj'}
2 <select value={this.state.msg} onChange={this.fn1}>
<option value="bj"> 北京 </option>
<option value="sh"> 上海 </option>
<option value="gz"> 广州 </option>
</select>
3 fn1 = e => {
this.setState({msg: e.target.value})
}
----------------------------------------------------------------------------
3 受控组件 --> 复选框 (Demo)
----------------------------------------------------------------------------
1 state = {isChecked: false}
2 <input type="checkbox" checked={this.state.isChecked} onChange={this.fn1}>
3 fn1 = e => {
this.setState({isChecked: e.target.checked})
}
----------------------------------------------------------------------------
4 多表单元素优化步骤 ↓
----------------------------------------------------------------------------
1 给表单元素添加 name 属性, 名称与 state 相同
<input value={this.state.msg} onChange={this.fn1} name="msg">
2 根据表单元素类型获取对应的值
const value = e.target.type === 'checkbox' ? e.target.checked : e.target.value
3 根据 name 设置对应 state
this.setState({
[name]: value
})
4 定义方法
hh = e => {
const target = e.target
const value = target.type === 'checkbox' ? target.checked : target.value
const name = target.name
}
----------------------------------------------------------------------------
5 非受控组件 --> 使用步骤
----------------------------------------------------------------------------
1 调用 React.createRef() 方法创建一个 ref 对象
constructor() {
super()
this.txtRef = React.createRef()
}
2 将创建好的 ref 对象添加到文本框中
<input type="text" ref={this.txtRef}>
3 通过 ref 对象就可, 获取到当前文本框的值了
this.txtRef.current.value
----------------------------------------------------------------------------