React 事件对象、键盘事件、表单事件、ref获取dom节点、react实现类似Vue双向数据绑定
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双向数据绑定的更多相关文章
- 六、React 键盘事件 表单事件 事件对象以及React中的ref获取dom节点 、React实现类似Vue的双向数据绑定
接:https://www.cnblogs.com/chenxi188/p/11782349.html 事件对象 .键盘事件. 表单事件 .ref获取dom节点.React实现类似vue双向数据绑定 ...
- React对比Vue(03 事件的对比,传递参数对比,事件对象,ref获取DOM节点,表单事件,键盘事件,约束非约束组件等)
import React from 'react'; class Baby extends React.Component { constructor (props) { super(props) t ...
- Vue 双向数据绑定、事件介绍以及ref获取dom节点
vue是一个MVVM的框架 M model V view MVVM model改变会影响视图view,view改变会影响model 双向数据绑定必须在表单里面使用 //我发现在谷歌浏览器翻译后的网页 ...
- vue 双向数据绑定 Vue事件介绍 以及Vue中的ref获取dom节点
<template> <div id="app"> <h2>{{msg}}</h2> <input type="te ...
- vue2.* 双向数据绑定 Vue事件介绍 以及Vue中的ref获取dom节点 04
<template> <div id="app"> <!-- 双向数据绑定(必须在表单里面使用) m:model v:view mvvm:model改 ...
- Vue 及双向数据绑定 Vue事件 以及Vue中的ref获取dom节点
<template> <div id="app"> <h2>{{msg}}</h2> <input type="te ...
- jQuery基础(鼠标事件,表单事件,键盘事件,自定义事件 篇)
1.jQuery鼠标事件之click与dbclick事件 方法一:$ele.click()(不带参数) <div id="test">点击触发<div&g ...
- 前端(十五)—— JavaScript事件:绑定事件方式、事件的冒泡和默认事件、鼠标事件、键盘事件、表单 事件、文档事件、图片事件、页面事件
JS事件:绑定事件方式.事件的冒泡和默认事件.鼠标事件.键盘事件.表单 事件.文档事件.图片事件.页面事件 一.事件的两种绑定方式 1.on事件绑定方式 document.onclick = func ...
- sbadmin表单事件
Form表单 自定义表单 <from action="" method="'><!--- 这里可以用表单组件快速生成表单元素哦 ...
随机推荐
- 03-spring框架—— AOP 面向切面编程
3.1 动态代理 动态代理是指,程序在整个运行过程中根本就不存在目标类的代理类,目标对象的代理对象只是由代理生成工具(不是真实定义的类)在程序运行时由 JVM 根据反射等机制动态生成的.代理对象与目标 ...
- 读《JavaScript面向对象编程指南》(二)
第五章 原型 在JavaScript中,所有函数都会拥有一个 prototype 的属性,默认初始值为空对象. 可以在相关的原型对象中添加新的方法和属性,甚至可以用自定义对象来完全替换掉原有的原型对象 ...
- npoi c#
没有安装excel docx的情况下 操作excel docx
- Mybatis日志无打印的问题
添加maven依赖 <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j1 ...
- golang之 Array(数组)
目录 一.Array(数组) 二.数组的定义 1. 基本语法 三.数组的初始化 1. 方式一 2. 方式二 3. 方式三 四.数组的遍历 1. 方式一:for循环遍历 2. 方式二:for range ...
- grunt的安装及使用
windows下安装grunt需要先安装ruby和nodejsruby -v 测试ruby是否安装成功node -v 测试nodejs是否安装成功npm -v 测试npm是否安装成功(npm是node ...
- CSS3 的动画属性
通过 CSS3,我们能够创建动画,这可以在许多网页中取代动画图片.Flash 动画以及 JavaScript. ㈠@keyframes 规则 ⑴浏览器支持 Firefox 支持替代的 @-moz-ke ...
- day_work_02
day_work_02 ------Python是一个优雅的大姐姐 作业一 设计思路(四个if一个while) 首先我先把商品用列表加元组的形式保存,然后将商品遍历出来. 键盘输入薪水. (if)判断 ...
- 51 Nod 1086 多重背包问题(二进制优化)
1086 背包问题 V2 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 有N种物品,每种物品的数量为C1,C2......Cn.从中任选若干件放 ...
- poj2386(dfs搜索水题)
Language:Default Lake Counting Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 42069 ...