绑定函数事件
在以类继承的方式定义的组件中,为了能方便地调用当前组件的其他成员方法或属性(如:this.state),通常需要将事件处理函数运行时的 this 指向当前组件实例。
run(){
alert('我是一个run方法')
}
//方法不需要加(),加了(),一旦页面加载进来就执行了
绑定事件处理函数this的几种方法:
方法1:
run(){
alert(this.state.name)
}
<button onClick={this.run.bind(this)}>按钮</button> //不绑定this的话,上面的方法里面的this就指向不了,拿不到数据
方法2:
constructor(props){
super(props); //固定写法
this.state={
name:'我是一个home组件'
}
//构造函数中改变
this.run = this.run.bind(this);
}
run(){
alert(this.state.name)
}
<button onClick={this.run}>按钮</button>
方法3:
//直接使用箭头函数 run=()=> {
alert(this.state.name)
}
<button onClick={this.run}>按钮</button>
函数方法里传值,改变state的值
setName=(str)=>{
//改变state的值
this.setState({
username:str
})
}
<button onClick={this.setName.bind(this,'张三')}>执行方法传值</button>
<button onClick={this.setName.bind(this,'张三','李四')}>执行方法传值</button>
获取dom节点方法
方法1:
run=(event)=> {
//alert(event.target) //获取执行事件的dom节点 //alert(event.target.getAttribute('aid')) //获取dom的属性 event.target.style.background='red';
}
<button aid="123" onClick={this.run}>按钮</button>
方法2:
import React from 'react';
class List extends React.Component {
constructor(props) {
super(props);
this.state = {
username:''
};
}
inputChange=()=>{
/*
获取dom节点
1、给元素定义ref属性
<input ref="username" />
2、通过this.refs.username 获取dom节点
*/
let val=this.refs.username.value;
this.setState({
username:val
})
}
getInput=()=>{
alert(this.state.username);
}
//键盘事件
inputKeyUp=(e)=>{
console.log(e.keyCode);
if(e.keyCode==13){
alert(e.target.value);
}
}
inputonKeyDown=(e)=>{
console.log(e.keyCode);
if(e.keyCode==13){
alert(e.target.value);
}
}
render() {
return (
<div>
{/* 获取表单的值
1、监听表单的改变事件 onChange
2、在改变的事件里面获取表单输入的值 ref获取
3、把表单输入的值赋值给username this.setState({})
4、点击按钮的时候获取 state里面的username this.state.username
*/}
<input ref="username" onChange={this.inputChange}/> <button onClick={this.getInput}>获取input的值</button>
<br /><br /> <hr />
<h2>键盘事件</h2>
<input onKeyUp={this.inputKeyUp}/>
<br /><br />
<input onKeyDown={this.inputonKeyDown}/>
</div>
);
}
}
export default List;