接:https://www.cnblogs.com/chenxi188/p/11782349.html

事件对象 、键盘事件、 表单事件 、ref获取dom节点、React实现类似vue双向数据绑定

一、事件对象

事件对象:在触发DOM上的某个事件时,会产生一个事件对象event。这个对象中包含着所有与事件有关的信息

新建Demo2.js输入如下(文件在[在src/components/]下)

1.获取目标节点,并改变其背景色

import React from 'react';

class Demo2 extends React.Component{
constructor(props){
super(props); this.state={
msg:'hello'
}
} run=(event)=>{
//打印出所有event事件函数
//console.log(event); //获取目标节点(此处是button),并改变其背景色为blue
alert(event.target);
event.target.style.background='blue';
} render(){
return(
<div>
<h1>{this.state.msg}</h1>
<button onClick={this.run}>输出所有事件对象</button>
</div>
)
}
}
export default Demo2;

App.js内容如下:

import React from 'react';
import logo from './logo.svg';
import './App.css';
//import Demo from './components/Demo'
import Demo2 from './components/Demo2.js'; function App() {
return (
<div className="App">
<img src={logo} className="App-logo" alt="logo" />
<Demo2 /> </div>
);
} export default App;

效果:改变按钮的颜色为blue



点后

2.获取目标节点的属性值

通过事件函数获取目标节点的aid属性值:event.target.getAttribute('aid')

Demo2.js内容:

import React from 'react';

class Demo2 extends React.Component{
constructor(props){
super(props); this.state={
msg:'hello'
}
} run=(event)=>{
//获取目标节点属性(button的aid='xxx')其中的xxxx
alert(event.target.getAttribute('aid'))
} render(){
return(
<div>
<button aid='111111' onClick={this.run}>输出所有事件对象</button>
</div>
)
}
}
export default Demo2;

App.js内容同上

结果:

3.表单事件(目标:通过按钮获取input输入的值)

方法1.通过onChange事件监听input值改变,运行对应函数(函数获取值用x.target.value)改变state值,再通过button的onClick事件监听点击,运行对应函数获取state值

1、监听表单的改变事件 onChange

2、在改变的事件里面获取表单输入的值 事件对象

3、把表单输入的值赋值给username this.setState({})

4、点击按钮的时候获取 state里面的username this.state.username

Demo2.js内容:

import React from 'react';

class Demo2 extends React.Component{
constructor(props){
super(props); this.state={
msg:'hello',
input_value:''
}
} //1.获取到input节点,并把值改变到state里的input_value
chan_state=(e)=>{
//a.在控制台输出获取到的input值
console.log(e.target.value); //b.改变state的值
this.setState({
input_value:e.target.value
});
} //2.通过按键点击事件获取state的input_value值
get_state=()=>{
//弹出state的input_value值
alert(this.state.input_value);
}
render(){
return(
<div>
{/*
1.首先用onChange监听input值改变的事件,然后调用chan_state自写函数,来改变state里的,input_value值;
2.再用button按钮的监听点击事件,然后去获取state内的input_value被改变后的值。从而实现获取input值功能
*/}
<input onChange={this.chan_state} />
<button onClick={this.get_state}>事件对象</button>
</div>
)
}
}
export default Demo2;

App.js内容不变

结果:



控制台的变化:

方法2.[同方法1]通过onChange事件监听input值改变,运行对应函数(函数获取值用ref)改变state值,再通过button的onClick事件监听点击,运行对应函数获取state值

1、监听表单的改变事件 : onChange

2、在改变的事件里面获取表单输入的值 : ref获取

(注:DOM用ref='xxx',函数获取时用 this.refs.userName.value)

3、把表单输入的值赋值给username : this.setState({})

4、点击按钮的时候获取 state里面的username : this.state.username

Demo.js内容:

import React from 'react';

class Demo2 extends React.Component{
constructor(props){
super(props); this.state={
userName:''
}
} //1.获取到input节点,并把值改变到state里的userName
chan_state=()=>{
// 【重点】通过refs获取到input的值【注意此处是refs】
let um=this.refs.userName.value //a.在控制台输出获取到的input值
console.log(um); //b.改变state的值
this.setState({
userName:um
});
} //2.通过按键点击事件获取state的userName值
get_state=()=>{
//弹出state的userName值
alert(this.state.userName);
}
render(){
return(
<div>
{/*
1.首先用onChange监听input值改变的事件,然后调用chan_state自写函数,来改变state里的,name值。为了方便对应函数获取input值此处加一属性ref='name';
2.再用button按钮的监听点击事件,然后去获取state内的input_value被改变后的值。从而实现获取input值功能
*/}
<input ref='userName' onChange={this.chan_state} />
<button onClick={this.get_state}>事件对象</button>
</div>
)
}
}
export default Demo2;

App.js内容不变,刷新查看效果(与方法1相同):

4.表单事件(在input输入值后按回车,获取到输入内容)

1.通过input的监听键盘弹起(onKeyUp),运行指定自写函数,判断按下的是否是回车键(代码:13),是的话就通过x.target.value获取input值,弹出来

Demo3.js

import React from 'react';

class Demo3 extends React.Component{
constructor(props){
super(props); this.state={
userName:''
}
} //键盘事件【获取按下键盘的代码:e.keyCode】
run=(e)=>{
console.log(e.keyCode);
if (e.keyCode==13){
//获取目标节点,并弹出其值
alert(e.target.value);
}
} render(){
return(
<div>
{/*
1.监听函数onKeyUp() 或 onKeyDown() keypress 键盘弹起或按下都可
*/}
<input onKeyUp={this.run} />
</div>
)
}
}
export default Demo3;

App.js:

import React from 'react';
import logo from './logo.svg';
import './App.css';
//import Demo from './components/Demo'
import Demo3 from './components/Demo3.js'; function App() {
return (
<div className="App">
<img src={logo} className="App-logo" alt="logo" />
<Demo3 />
</div>
);
} export default App;

效果:

输入并按下回车后:



控制台显示:

5.双向数据绑定(改变input值,state对应值跟着改变,h1显示state的值跟着也改变)

双向数据绑定即:model改变影响View,view改变反过来影响model。

todolist.js内容:

import React from 'react';

class List extends React.Component{
constructor(props){
super(props);
this.state={
username:'jim rans'
}
} //input函数:数据双向绑定(model改变影响View,view改变反过来影响model)
changevalue=(e)=>{
this.setState({
username:e.target.value
})
} //button函数:点击按钮改变state值,input,h1也跟着变
setname=(e)=>{
this.setState({
username:'变身按钮传来的名字'
})
} render(){
return(
<div>
{/*h1 input是view.input改变影响state,state又影响h1显示的内容*/}
<h1>{this.state.username}</h1>
<input value={this.state.username} onChange={this.changevalue} />
<button onClick={this.setname} >改变</button>
</div>
);
}
}
export default List;

App.js内容:

import React from 'react';
import logo from './logo.svg';
import './App.css';
import List from './components/todolist.js' function App() {
return (
<div className="App">
<img src={logo} className="App-logo" alt="logo" />
<List />
</div>
);
}
export default App;

效果:input里输入值,state会跟着改变,然后h1也跟着变



点按钮,传值改变state和h1,input:

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

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

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

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

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

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

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

  4. React 事件对象、键盘事件、表单事件、ref获取dom节点、react实现类似Vue双向数据绑定

    1.案例实现代码 import React, { Component } from 'react'; /** * 事件对象.键盘事件.表单事件.ref获取dom节点.react实现类似Vue双向数据绑 ...

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

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

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

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

  7. Angular4.x 创建组件|绑定数据|绑定属性|数据循环|条件判断|事件|表单处理|双向数据绑定

    Angular4.x 创建组件|绑定数据|绑定属性|数据循环|条件判断|事件|表单处理|双向数据绑定 创建 angular 组件 https://github.com/angular/angular- ...

  8. 20181019 记录 window.setTimeout('dofunction()',2000); - layui form 表单提交 事件 - F11全屏 事件 window.onresize

    1 延时事件 window.setTimeout('dofunction()',2000); 函数外面要有引号 如果没有引号 就不能延时执行 应该是内容进行eval,所以外层不是传递字符串的话,外层函 ...

  9. form表单submit事件

    form表单submit事件同时会触发form表单中button按钮的click事件 <!DOCTYPE html> <html> <head> <meta ...

随机推荐

  1. C#中struct和class的区别详解 (转载)

    本文详细分析了C#中struct和class的区别,对于C#初学者来说是有必要加以了解并掌握的. 简单来说,struct是值类型,创建一个struct类型的实例被分配在栈上.class是引用类型,创建 ...

  2. mathematica练习程序(第一章 Mathematica的基本量)

    虽然过去有用Mathematica解过一些问题,不过对这个语言并没有系统学习过. 所以最近想重新把Mathematica系统的学一遍. 偶然在B站上找到了这样一组教程:https://www.bili ...

  3. 第1节 storm日志告警:1、 - 5、日志监控告警业务需求、代码、集群运行、总结

    如何解决短信或者邮件频繁发送的问题:每次发送的时候都先查询数据库记录,看一下有没有给这个人发送消息,上一次发送消息的时间是什么时候,如果发送时间间隔小于半个小时,就不要再发了 ============ ...

  4. RabbitMq学习笔记——概念

    1.RabbitMQ简介 MQ全称为Message Queue(消息队列),是一种“应用程序”<—>“应用程序”的通信方法.MQ是一个典型的“消费”<—>“生产者”模型的代表, ...

  5. 引用类型--Function类型(函数声明与函数表达式、arguments.callee、caller、apply、call、bind)

    在ECMAScript中函数实际上是对象.每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法.由于函数是对象,因此函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定 ...

  6. Python入门知识总结【新手必学】

    Python 基础学习输入和输出list 和 tuple条件判断循环dict 和 set感觉python这门语言用途较广,先熟悉下其语法.PS:另外很多人在学习Python的过程中,往往因为没有好的教 ...

  7. 前端学习笔记系列一:2 Vue的单文件组件

    (1)非单文件vue组件和单文件vue组件的一般写法 一个完整的vue组件会包括三个部分:一是template模板部分,二是js程序逻辑部分,三是css样式部分.每个组件都有属于自己的模板,js和样式 ...

  8. MyEclipse插件github安装使用

    MyEclipse插件github安装使用   网络上的介绍一堆堆的,但是自己尝试了下,发现问题很多,就动手做个教程. 大纲 1.git客户端安装 2.ssh配置 3.egit安装配置 4.参考资料 ...

  9. Xeon 第一次训练赛 苏州大学ICPC集训队新生赛第二场(同步赛) [Cloned]

    A.给出一个字符串,求出连续的权值递增和,断开以后权值重新计数,水题 #include<iostream> #include<string> #include<cmath ...

  10. Linux ---- 查看当前TCP连接数

    一.查看哪些IP连接本机 netstat -an 二.查看TCP连接数 1)统计80端口连接数netstat -nat|grep -i "80"|wc -l 2)统计httpd协议 ...