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. 03-spring框架—— AOP 面向切面编程

    3.1 动态代理 动态代理是指,程序在整个运行过程中根本就不存在目标类的代理类,目标对象的代理对象只是由代理生成工具(不是真实定义的类)在程序运行时由 JVM 根据反射等机制动态生成的.代理对象与目标 ...

  2. 读《JavaScript面向对象编程指南》(二)

    第五章 原型 在JavaScript中,所有函数都会拥有一个 prototype 的属性,默认初始值为空对象. 可以在相关的原型对象中添加新的方法和属性,甚至可以用自定义对象来完全替换掉原有的原型对象 ...

  3. npoi c#

    没有安装excel docx的情况下 操作excel docx

  4. Mybatis日志无打印的问题

    添加maven依赖 <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j1 ...

  5. golang之 Array(数组)

    目录 一.Array(数组) 二.数组的定义 1. 基本语法 三.数组的初始化 1. 方式一 2. 方式二 3. 方式三 四.数组的遍历 1. 方式一:for循环遍历 2. 方式二:for range ...

  6. grunt的安装及使用

    windows下安装grunt需要先安装ruby和nodejsruby -v 测试ruby是否安装成功node -v 测试nodejs是否安装成功npm -v 测试npm是否安装成功(npm是node ...

  7. CSS3 的动画属性

    通过 CSS3,我们能够创建动画,这可以在许多网页中取代动画图片.Flash 动画以及 JavaScript. ㈠@keyframes 规则 ⑴浏览器支持 Firefox 支持替代的 @-moz-ke ...

  8. day_work_02

    day_work_02 ------Python是一个优雅的大姐姐 作业一 设计思路(四个if一个while) 首先我先把商品用列表加元组的形式保存,然后将商品遍历出来. 键盘输入薪水. (if)判断 ...

  9. 51 Nod 1086 多重背包问题(二进制优化)

    1086 背包问题 V2  基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 有N种物品,每种物品的数量为C1,C2......Cn.从中任选若干件放 ...

  10. poj2386(dfs搜索水题)

    Language:Default Lake Counting Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 42069   ...