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 ="" 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;

React 事件对象、键盘事件、表单事件、ref获取dom节点、react实现类似Vue双向数据绑定的更多相关文章

  1. 六、React 键盘事件 表单事件 事件对象以及React中的ref获取dom节点 、React实现类似Vue的双向数据绑定

    接:https://www.cnblogs.com/chenxi188/p/11782349.html 事件对象 .键盘事件. 表单事件 .ref获取dom节点.React实现类似vue双向数据绑定 ...

  2. React对比Vue(03 事件的对比,传递参数对比,事件对象,ref获取DOM节点,表单事件,键盘事件,约束非约束组件等)

    import React from 'react'; class Baby extends React.Component { constructor (props) { super(props) t ...

  3. Vue 双向数据绑定、事件介绍以及ref获取dom节点

    vue是一个MVVM的框架 M model V view MVVM  model改变会影响视图view,view改变会影响model 双向数据绑定必须在表单里面使用 //我发现在谷歌浏览器翻译后的网页 ...

  4. vue 双向数据绑定 Vue事件介绍 以及Vue中的ref获取dom节点

    <template> <div id="app"> <h2>{{msg}}</h2> <input type="te ...

  5. vue2.* 双向数据绑定 Vue事件介绍 以及Vue中的ref获取dom节点 04

    <template> <div id="app"> <!-- 双向数据绑定(必须在表单里面使用) m:model v:view mvvm:model改 ...

  6. Vue 及双向数据绑定 Vue事件 以及Vue中的ref获取dom节点

    <template> <div id="app"> <h2>{{msg}}</h2> <input type="te ...

  7. jQuery基础(鼠标事件,表单事件,键盘事件,自定义事件 篇)

    1.jQuery鼠标事件之click与dbclick事件   方法一:$ele.click()(不带参数)   <div id="test">点击触发<div&g ...

  8. 前端(十五)—— JavaScript事件:绑定事件方式、事件的冒泡和默认事件、鼠标事件、键盘事件、表单 事件、文档事件、图片事件、页面事件

    JS事件:绑定事件方式.事件的冒泡和默认事件.鼠标事件.键盘事件.表单 事件.文档事件.图片事件.页面事件 一.事件的两种绑定方式 1.on事件绑定方式 document.onclick = func ...

  9. sbadmin表单事件

    Form表单 自定义表单 <from action="" method="'><!---      这里可以用表单组件快速生成表单元素哦        ...

随机推荐

  1. Delphi 变量的作用域

  2. 使用TensorFlow玩GTA5

    小白学TensorFlow(一) tensorflow安装 在安装之前,您必须选择以下类型的TensorFlow之一来安装: TensorFlow仅支持CPU支​​持.如果您的系统没有NVIDIA®G ...

  3. tar.xz压缩工具使用(转)

    XZ压缩最新压缩率之王 xz这个压缩可能很多都很陌生,不过您可知道xz是绝大数linux默认就带的一个压缩工具. 我是在下载phpmyadmin的时候看到这种压缩格式的,phpmyadmin压缩包xz ...

  4. Red Hat Enterprise Linux 6安装好,开启网卡到搭建tftp服务器和安装dnw驱动,安装samba服务器

    今天一顿误操作,只能把Red Hat Enterprise Linux 6重新安装,一些必备工作只能重做,重做之后立马把Linux的文件备份,以备不时只需! 开启Linux以太网卡:vim /etc/ ...

  5. Codeforces Round #581 (Div. 2) B. Mislove Has Lost an Array (贪心)

    B. Mislove Has Lost an Array time limit per test1 second memory limit per test256 megabytes inputsta ...

  6. Django学习系列12:把Python变量传入模板中渲染

    从视图的Python代码中把变量传入HTML模板. 模板中使用哪种句法引入Python对象,要使用的符号{{...}},它会以字符串的形式显示对象: <html> <head> ...

  7. 理解 Cookie、Session、Token

    发展史 Cookie Session Token Token的起源 基于服务器的验证 基于服务器验证方式暴露的一些问题 基于Token的验证原理 Tokens的优势 发展史 1.很久很久以前,Web ...

  8. k8spod控制器概述

    自主式pod对象由调度器绑定至目标工作节点后即由相应节点上的kubelet负责监控其容器的存活性,容器主进程崩溃后,kubelet能够自动重启相应的容器.不过,kubelet对非主进程崩溃类的容器错误 ...

  9. python深浅copy

    预备知识一——python的变量及其存储 在详细的了解python中赋值.copy和deepcopy之前,了解一下python内存中变量的存储情况. 在高级语言中,变量是对内存及其地址的抽象.对于py ...

  10. Java基础——集合框架(待整理)

    ArrayList 和 和 Vector 的区别 从代码的最终的操作形式上可以发现,代码的输出结果与之前是一样的,而且没有区别,但是两者的区别还在于其内部的组成上. No. 区别点 Vector Ve ...