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. httpd统计的其他方法,awk,sed等

    1. https://stackoverflow.com/questions/345546/how-to-get-requests-per-second-for-apache-in-linux 2. ...

  3. 架构师成长之路5.7-Saltstack数据系统

    点击架构师成长之路 架构师成长之路5.7-Saltstack数据系统 1. Saltstack的两种数据系统 Grains Pollars 2. Saltstack数据系统---Grains Grai ...

  4. Hive Serde(四)

    Hive Serde 目的: ​ Hive Serde用来做序列化和反序列化,构建在数据存储和执行引擎之间,对两者实现解耦. 应用场景: ​ 1.hive主要用来存储结构化数据,如果结构化数据存储的格 ...

  5. arm开发板make编译时遇到 make[2]:*** [s-attrtab] 已杀死 问题的解决方案

    未验证 出现“make[2]: *** [s-attrtab] 已杀死”log 是由于内存不足 解决方案 增加swapfile 步骤如下: 1. 查看当前swapfile状态 root@ubuntu: ...

  6. 什么是Redis缓存穿透、缓存雪崩和缓存击穿

    https://baijiahao.baidu.com/s?id=1619572269435584821&wfr=spider&for=pc 缓存穿透 缓存穿透,是指查询一个数据库一定 ...

  7. python之路-笔录2[CSS&JS]

    *** 目录 *** 1. 块级标签与行内标签 2. css常用清除样式 3. 两种清除浮动的方式 4. CSS学习 5. JS 学习 *** END *** 1. 块级标签与行内标签 常见的块级元素 ...

  8. mysql之单表条件查询

    create table staff_info( id int primary key auto_increment, name varchar(32) not null, age int(3) un ...

  9. python模块安装问题:no matching distribution found for XXX 或者 Read timed out.

    https://blog.csdn.net/zhang_han666/article/details/88286010 看了很多解决问题的博客,亲测通过更换国内安装源和设置超时时间可以解决.在pip ...

  10. 开发一个简单 ef+dapper 数据操作

    新建一个net core 2项目