博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
05.React 键盘事件 表单事件 事件对象以及React中的ref获取dom节点 、React实现类似Vue的双向数据绑定...
阅读量:5795 次
发布时间:2019-06-18

本文共 4997 字,大约阅读时间需要 16 分钟。

hot3.png

事件对象

注释写法

{/*            */}

一.获取执行事件的dom节点

run=(event)=>{    alert(event.target);/**获取执行事件的dom节点**/    //改变dom样式    event.target.style.background='red';    //获取dom属性    alert(event.target.getAttribute('id'));}

二.表单事件

点击按钮,获取input表单的值

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

 

inputChange=(e)=>{        // console.log('111');        //获取表单的值        console.log(e.target.value);        this.setState({            username:e.target.value        })    }

 

getInput=()=>{        alert(this.state.username);    }

 

整体参考代码

/*事件对象  、键盘事件、 表单事件 、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(            
{this.state.msg} {/* 事件对象 */}

事件对象演示


表单事件

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

) } }export default Home;

三.通过ref获取表单节点

ref(VUE中也有)

首先给dom取ref名字

 

通过this.refs.username 获取dom节点

inputChange=()=>{        /*           获取dom节点           1、给元素定义ref属性                          2、通过this.refs.username 获取dom节点        */        let val=this.refs.username.value;        this.setState({            username:val        })    }

 

整体参考代码

import React from 'react';class List extends React.Component {    constructor(props) {        super(props);        this.state = {             username:''         };    }    inputChange=()=>{        /*           获取dom节点           1、给元素定义ref属性                          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 (            
{/* 获取表单的值 1、监听表单的改变事件 onChange 2、在改变的事件里面获取表单输入的值 ref获取 3、把表单输入的值赋值给username this.setState({}) 4、点击按钮的时候获取 state里面的username this.state.username */}

键盘事件

); }}export default List;

四.键盘事件

参考如上第三部分整体代码。

五.实现类似Vue的双向数据绑定

Model改变影响View

View改变反过来影响Model

  1. 首先input的value绑定state(只写这个会报错,提醒必须填写onchange方法。不报错需要填写成defaultvalue)
 

    2.填写onchange方法

 

inputChange=(e)=>{        this.setState({            username:e.target.value        })    }

 

   3.撒旦

 

整体代码

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 (            

双休数据绑定

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

{this.state.username}

); }}export default Todolist;

 

转载于:https://my.oschina.net/glorylion/blog/3000902

你可能感兴趣的文章
PDF文件怎么编辑,超简单的方法
查看>>
EasyUI基础入门之Easyloader(载入器)
查看>>
Uva 839 Not so Mobile
查看>>
程序猿必备 MyEclipse2013-2014系列
查看>>
java中ArrayList 、LinkList区别
查看>>
Spring ’14 Wave Update: Installing Dynamics CRM on Tablets for Windows 8.1
查看>>
利用rand7()构造rand10()
查看>>
MySQL 备份与恢复
查看>>
吃午饭前,按书上的代码写会儿--Hunt the Wumpus第一个版本
查看>>
easyui中combobox的值改变onchang事件
查看>>
TEST
查看>>
PAT A1037
查看>>
ReactiveSwift源码解析(三) Signal代码的基本实现
查看>>
(六)Oracle学习笔记—— 约束
查看>>
[Oracle]如何在Oracle中设置Event
查看>>
top.location.href和localtion.href有什么不同
查看>>
02-创建hibernate工程
查看>>
information_schema系列五(表,触发器,视图,存储过程和函数)
查看>>
瓜子二手车的谎言!
查看>>
[转]使用Git Submodule管理子模块
查看>>