一、定义和调用方法:

在Home组件内定义run方法,在render中通过{this.run}来调用。

在 React 中另一个不同是:不能使用返回 false 的方式阻止默认行为, 你必须明确的使用 preventDefault,例如下面的a标签。

值得注意的是,通过 bind 方式向监听函数传参时,在定义的监听函数中事件对象 e 要排在所传递参数的后面。

import React from 'react';

class Home extends React.Component{
    constructor(props){
        super(props);
        this.state={
            msg:"我是home的组件",
        }
    }
    //定义方法1:
    run() {
        alert('我是一个run方法');
    }
    //定义方法2:
    run2 = function () {
        alert('我是一个run方法222');
    }
    handleClick(tempStr, e){
        e.preventDefault();//阻止链接默认打开新的页面
        console.log('链接被点击---' + tempStr);
        //return false;
    }
    render(){
        return (
            <div>
                <button onClick={this.run}>点击按钮</button>
                <button onClick={this.run2}>点击按钮方法2</button>
                <a href="#" onClick={this.handleClick.bind(this, '传参')}>点我阻止默认行为和传参</a>
            </div>
        )
    }
}
export default Home;

 注:绑定事件处理函数this的三种方法:

import React from 'react';

class Home extends React.Component{
    constructor(props){
        super(props);
        this.state={
            msg:"我是home的组件",
            title:'我是title',
        }
        // 改变this指向的方法2
        this.getMsg2=this.getMsg2.bind(this);
    }
    getMsg(){
        alert(this.state.msg);
    }
    getMsg2(){
        alert(this.state.msg);
    }
    getMsg3=()=>{
        alert(this.state.msg);
    }
    setMsg=()=>{
        this.setState({
            msg:"我是home的组件---改变了"
        })
    }
   
    render(){
        return (
            <div>
                <button onClick={this.getMsg.bind(this)}>获取数据---改变this指向的方法1:用bind(this)</button>
                <br/>
                <button onClick={this.getMsg2}>获取数据---改变this指向的方法2:在构造方法中用bind(this)</button>
                <br/>
                <button onClick={this.getMsg3}>获取数据---改变this指向的方法3:用箭头函数方式</button>
                <br/>
                <button onClick={this.setMsg}>改变数据</button>
            </div>
        )
    }
}
export default Home;

说明:react更改数据用下面的方法:this.setState({ msg:'xxx' })

二、表单事件:

获取input值的两个方法:

方法1:给input标签添加onChange方法进行监听,把输入的值通过event.target.value获取,然后赋值给state里面的input,取值时直接从this.state.input中取即可。(受控组件)

方法2:给input标签添加ref="username"属性且添加onChange方法进行监听,把输入的值通过this.refs.username.value获取,然后赋值给state里面的input,取值时直接从this.state.input中取即可。(非受控组件)

import React from 'react';

class Home extends React.Component{
    constructor(props){
        super(props);
        this.state={
            input:'',
            inputStr:'默认input框内值'
        }
    }
    run2(event){
        //在触发DOM上某个事件时,会产生一个事件对象event,它包含所有与事件有关的信息
        // alert(event.target);
        event.target.style.background='red';
        //通过event.targe获取dom属性
        alert(event.target.getAttribute('aid'));
    }
    change=(e)=>{
        console.log(e.target.value);
        this.setState({
            input:e.target.value
        })
    }
    change2=(e)=>{
        //获取dom节点,给元素设置ref属性,通过this.refs.username来获取dom
        let val=this.refs.username.value;
        console.log("val===="+val);
        this.setState({
            input:val
        })
    }
    getInput=(e)=>{
        alert(this.state.input);
    }
    change3=(e)=>{
        this.setState({
            inputStr:e.target.value
        })
    }
    render(){
        return (
            <div>
                <button onClick={this.run2} aid='123'>事件对象演示</button>
                <h2>表单事件</h2>
                <input onChange={this.change}></input>
                <button onClick={this.getInput}>获取input的值----方法1:通过事件对象event</button>

                <input ref="username" onChange={this.change2} aid='456'></input>
                <button onClick={this.getInput}>获取input的值--方法2:通过ref获取dom节点</button>
                
                双向数据绑定
                <p>{this.state.inputStr}</p>
                <input value={this.state.inputStr} onChange={this.change3}></input>
            </div>
        )
    }
}
export default Home;

三、键盘事件:

通过onKeyUp来监听键盘抬起时的事件,通过e.keyCode来判断当前是哪个键在抬起。与之对应的是onKeyDown事件。

import React from 'react';

class Home extends React.Component{
    constructor(props){
        super(props);
        this.state={}
    }
    inputKeyUp=(e)=>{
        console.log(e.keyCode);
        if(e.keyCode==13){
            alert(e.target.value);
        }
    }
    render(){
        return (
            <div>
                <input onKeyUp={this.inputKeyUp}></input>
            </div>
        )
    }
}
export default Home;