• 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;
  • 相关阅读:
    转:什么是即时编译(JIT)!?OpenJDK HotSpot VM剖析
    用好spring mvc validator可以简化代码
    接口服务中的日志
    rest api参数与content-type
    【单页应用】全局控制器app应该干些什么?
    【webapp的优化整理】要做移动前端优化的朋友进来看看吧
    【单页应用】理解MVC
    【单页应用】view与model相关梳理
    【单页应用之通信机制】view之间应该如何通信
    【单页应用巨坑之History】细数History带给单页应用的噩梦
  • 原文地址:https://www.cnblogs.com/loaderman/p/11551480.html
Copyright © 2020-2023  润新知