React 事件對象、鍵盤事件、表單事件、ref獲取dom節點、react實現類似Vue雙向數據綁定


1、案例實現代碼

import React, { Component } from 'react';

/**
 * 事件對象、鍵盤事件、表單事件、ref獲取dom節點、react實現類似Vue雙向數據綁定
 * 事件對象: 在觸發DOM上的某個事件時,會產生一個事件對象event,這個對象包含着所有與事件有關的信息
 * 表單事件: 獲取表單的值
 *      1、監聽表單的改變事件    ---onChange
 *      2、在改變的事件里面獲取表單輸入的值   ---event
 *      3、把表單輸入的值賦值給username    ---inputChange
 *      4、點擊按鈕的時候獲取state里面的username   ---getInput
 * ref獲取dom節點: 獲取表單的值
 *      1、監聽表單的改變事件    ---onChange
 *      2、在改變的事件里面獲取表單輸入的值   ---ref
 *      3、把表單輸入的值賦值給username    ---inputChange
 *      4、點擊按鈕的時候獲取state里面的username   ---getInput
 *鍵盤事件:
 *      1、onKeyUp
 *      2、onKeyDown
 *react實現類似Vue雙向數據綁定
 *      1、 <input  value={this.state.username} onChange={this.inputChange1}/>
 *      2、inputChange1=(e)=>{
                this.setState({
                    username:e.target.value
                })
            }
 *
 */
class Home5 extends Component{
    constructor(props){
        super(props);
        this.state={
            title:'這是Home5',
            username:"楊文傑"
        }
    }

    /**
     * 一般通過這個事件對象獲取Dom節點,即event.target
     * 通過event獲取dom屬性,即event.target.getAttribute
     * @param event 事件對象
     */
    run=(event)=>{
        alert(this.state.title)
        alert(event.target) ;//獲取Dom節點 ,一般也只是獲取Dom節點
        event.target.style.background='red';
        //獲取Dom的屬性的值
        alert(event.target.getAttribute('aid'))
    }
    /**
     * 獲取表單的值
     * @param e
     */
    inputChange=(e)=>{

        console.log(e.target.value);
        this.setState({
            username:e.target.value
        });
    }
    getInput=()=>{
        alert(this.state.username)
    }

    /**
     * Ref獲取表單值
     * @param e
     */
    inputChangeRef=(e)=>{
        /**
         * 獲取Dom節點
         *      1、給元素定義ref屬性
         *              <input ref="username" />
         *      2、 通過this.refs.username 獲取Dom節點
        */
        let val = this.refs.username.value;
        this.setState({
            username:val
        })
    }
    getInputRef=()=>{
        alert(this.state.username)
    }

    /**
     * 鍵盤事件
     * @param e
     */
    inputKeyUp=(e)=>{
        console.log(e.keyCode);
        if(e.keyCode){
            alert(e.target.value);
        }
    }

    inputKeyDown=(e)=>{
        console.log(e.keyCode);
        if(e.keyCode){
            alert(e.target.value);
        }
    }

    /**
     * 雙向數據綁定
     * @param e
     */
    inputChange1=(e)=>{
        this.setState({
            username:e.target.value
        })
    }

    changeUsernameValue=(e)=>{
        this.setState({
            username:"改變了"
        })
    }
    render(){
        return(
            <div>
                {this.state.title}
                <p>事件對象演示</p>
                <button aid ="123" onClick={this.run}>事件對象</button>
                <br/>
                <p>表單事件對象演示</p>
                <input onChange={this.inputChange}/><button onClick={this.getInput}>獲取input輸入框值</button>
                <br/>
                <p>表單事件對象演示---ref獲取表單值</p>
                <input ref="username" onChange={this.inputChangeRef}/><button onClick={this.getInputRef}>獲取input輸入框值</button>
                <br/>
                <p>鍵盤事件</p>
                <input onKeyUp={this.inputKeyUp}/><button>鍵盤事件</button>
                <br/>
                <input onKeyDown={this.inputKeyDown}/><button>鍵盤事件</button>
                <br/>
                <p>雙向數據綁定---model改變影響view view改變反過來影響model</p>
                <input  value={this.state.username} onChange={this.inputChange1}/>
                {this.state.username}
                <br/>
                <button onClick={this.changeUsernameValue}>雙向數據修改</button>
            </div>
        )
    }
}
export  default  Home5;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM