react事件对象 、键盘事件、 表单事件 、ref获取dom节点、React实现类似vue双向数据绑定

/*
事件对象  、键盘事件、 表单事件 、ref获取dom节点、React实现类似vue双向数据绑定


事件对象:在触发DOM上的某个事件时,会产生一个事件对象event。这个对象中包含着所有与事件有关的信息


*/

import React from 'react';

import '../assets/css/index.css';


class Home extends React.Component{

    // 子类必须在constructor方法中调用super方法,否则新建实例时会报错。这是因为子类没有自己的this对象,而是继承父类的this对象,然后对其进行加工。如果不调用super方法,子类就得不到this对象

    constructor(props){
        super(props);   //固定写法

        this.state={

            msg:'我是一个home组件',
            username:''
        }   

        
    }

    run=(event)=>{

        // alert(this.state.msg);


        // console.log(event);

        // alert(event.target);   /*获取执行事件的dom节点*/

        event.target.style.background='red';


        //获取dom的属性
        alert(event.target.getAttribute('aid'))



    }

    inputChange=(e)=>{

        // console.log('111');

        //获取表单的值

        console.log(e.target.value);


        this.setState({

            username:e.target.value
        })


    }

    getInput=()=>{

        alert(this.state.username);
    }

    render(){
        return(
            <div>              
               
               {this.state.msg}

               {/* 事件对象 */}

               <h2>事件对象演示</h2>

               <button aid="123" onClick={this.run}>事件对象</button>

               <br /><br /> <hr />


                <h2>表单事件</h2>


                {/* 获取表单的值

                1、监听表单的改变事件                        onChange
                2、在改变的事件里面获取表单输入的值           事件对象
                3、把表单输入的值赋值给username              this.setState({})
                4、点击按钮的时候获取 state里面的username     this.state.username
                 */}

                <input onChange={this.inputChange}/> <button onClick={this.getInput}>获取input的值</button>




                 <br /><br /> <hr />
            </div>
        )

    }    
}
export default Home;
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;
import React,{Component} from 'react';


class Todolist extends Component {
    constructor(props) {
        super(props);
        this.state = { 

            username:"111"
        };
    }
    inputChange=(e)=>{
        this.setState({

            username:e.target.value
        })

    }
    setUsername=()=>{
        this.setState({

            username:'李四'
        })

    }
    render() {
        return (
            <div>

                <h2>双向数据绑定</h2>


                {/* model改变影响View    view改变反过来影响model  */}

                <input  value={this.state.username} onChange={this.inputChange}/> 

               <p> {this.state.username}</p>
               
               <button onClick={this.setUsername}>改变username的值</button>


            </div>
        );
    }
}

export default Todolist;
原文地址:https://www.cnblogs.com/loaderman/p/11551480.html