不管是在原生的js还是vue中,所有的事件都有其事件对象,该事件对象event中包含着所有与事件相关的信息,在react中,所有的事件也有其事件对象,在触发DOM上的某个事件时,就会产生一个事件对象。

在开始前,先按照之前创建项目的方法新建一个项目,然后对项目目录进行整理,并新建一个组件,在App.js中引入该组件。

获取事件对象

首先在组件中添加一个按钮,并为按钮添加一个点击事件,点击打印该事件的事件对象。

点击按钮触发事件,打印该事件的事件对象。

在这个事件对象中,有很多的字段,用的比较多就是targetl了,例如实现下面的一些用法。

表单事件

在vue中,通过事件双向绑定,我们可以很轻松的获取到用户输入的值,但是在react中,并没有这种数据流,所以,当我们需要获取到用户输入的input值时,就需要使用最原始的方法了:

  1. 监听input框的改变事件
  2. 在改变事件中获取输入的值
  3. 在构造函数中添加一个数据inputValue,并将获取的值赋值给inputValue
  4. 获取state里面的inputvalue

完整的写法如下:

import React from 'react';
class Test extends React.Component{
constructor(props){
super(props);
this.state={
msg:'我是一个组件',
inputValue:''
}
}
changeInput=(event)=>{
console.log(event.target.value);
this.setState({
inputValue:event.target.value
})
}
getInput=()=>{
console.log(this.state.inputValue)
}
render(){
return(
<div>
{this.state.msg}
<br/>
<input onChange={this.changeInput}/>
<button onClick={this.getInput}>取值</button>
</div>
)
}
}
export default Test;

ref获取DOM节点

在上面的例子中,通过事件对象的target获取到了用户输入的值,虽然值拿到了,但是过程比较麻烦,在react中,除了target字段以外,还可以通过ref字段获取DOM节点,从而获取我们想要的信息,例如在上面的例子中,想要获取用户输入的input的值,可以为input添加ref并指定名字,在触发的事件中就可以通过ref的名字找到相应的节点,从而获取数据了。

import React from 'react';
class Test extends React.Component{
constructor(props){
super(props);
this.state={
msg:'我是一个组件',
inputValue:''
}
}
getInput=()=>{
let val = this.refs.ivalue.value;
this.setState({
inputValue:val
});
console.log(this.state.inputValue);
}
render(){
return(
<div>
{this.state.msg}
<br/>
<input ref="ivalue" />
<button onClick={this.getInput}>取值</button>
</div>
)
}
}
export default Test;

模拟实现数据双向绑定

import React from 'react';
class Test extends React.Component{
constructor(props){
super(props);
this.state={
inputValue:'123'
}
}
getInput=(e)=>{
this.setState({
inputValue:e.target.value
});
}
render(){
return(
<div>
{this.state.inputValue}
<br/>
<input value={this.state.inputValue} onChange={this.getInput}/>
</div>
)
}
}
export default Test;

react事件中的事件对象和常见事件的更多相关文章

  1. js事件中的event对象

    addEvent(oDiv,"click",function(event){ console.log(event.bubbles+"事件是否冒泡"); cons ...

  2. ng-change事件中如何获取$event和如何在子元素事件中阻止调用父级元素事件(阻止事件冒泡)

    闲聊: 今天小颖要实现一个当改变了select内容后弹出一个弹框,并且点击select父元素使得弹框消失,这就得用到阻止事件的冒泡了:$event.stopPropagation(),然而小颖发现,在 ...

  3. react native 中webview内的点击事件传到外部原生调用

    先说一下我使用webview的时候遇到的一个功能需求 是这样的,上图中的这个页面是用h5做的,但是由于点击"我的优惠劵"是需要跳转到我原生的页面,也就是说我需要获得这个h5提供的点 ...

  4. silverlight中鼠标放在对象的提示事件

    1.xaml 中实现 <Rectangle x:Name="toolTip" Grid.Column="0" Grid.Row="1" ...

  5. Python 中Semaphore 信号量对象、Event事件、Condition

    Semaphore 信号量对象 信号量是一个更高级的锁机制.信号量内部有一个计数器而不像锁对象内部有锁标识,而且只有当占用信号量的线程数超过信号量时线程才阻塞.这允许了多个线程可以同时访问相同的代码区 ...

  6. Javascript高级编程学习笔记(63)—— 事件(7)鼠标及滚轮事件

    鼠标与滚轮事件 鼠标事件是web开发中最常用的一类事件,毕竟鼠标是最主要的定位设备 DOM3级事件中定义了9个鼠标事件: click:在用户单击主鼠标按钮(一般为鼠标左键)或者按下回车时触发,这一点对 ...

  7. javascript事件之鼠标滚轮(mousewheel)和DOMMouseScroll事件

    javascript事件之鼠标滚轮(mousewheel)和DOMMouseScroll事件 发布时间:2015-02-07   编辑:www.jquerycn.cn 本文学习下,javascript ...

  8. react事件中的this指向

    在react中绑定事件处理函数的this指向一共有三种方法,本次主要总结这三种方式. 项目创建 关于项目的创建方法,在之前的文章中有记录,这里不再赘述,项目创建成功后,按照之前的目录结构对生成的项目进 ...

  9. 优雅的在React组件中注册事件

    前言 在React的开发中,我们经常需要在 window 上注册一些事件, 比如按下 Esc 关闭弹窗, 按上下键选中列表内容等等.比较常见的操作是在组件 mount 的时候去 window 上监听一 ...

随机推荐

  1. xdoj-1022-A simple math problem 2 // 太强了

    //其实题目中f[n]的值可理解为存在多少个整数对使a*b<=n #include<cstdio> #define N 1007 #define maxn 1000005 using ...

  2. ACM/ICPC 2018亚洲区预选赛北京赛站网络赛-B:Tomb Raider(二进制枚举)

    时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 Lara Croft, the fiercely independent daughter of a missing adv ...

  3. PTA——统计区间内质数

    PTA 7-33 统计素数并求和 #include<stdio.h> #include<math.h> int prime(int p); int main() { int m ...

  4. CentOS下如何根据Dump文件分析线上问题

    https://blog.csdn.net/lixin03080/article/details/79711296 一.保存现场 1.记录系统整体资源使用情况,进程信息.线程信息 top -b -n ...

  5. LeetCode - Subtree of Another Tree

    Given two non-empty binary trees s and t, check whether tree t has exactly the same structure and no ...

  6. linux内核入门(1)——基本简介和编译

    获取linux内核源码,自己选择版本(我下载的是linux-3.1.10.tar.gz ,我是直接下载到/usr/src文件夹的) 下载地址传送门 https://www.kernel.org/pub ...

  7. Unity3D中常用的数据结构 学习

    Array 1.数组存储在连续的内存上. 2.数组的元素都是相同类型或者类型的衍生类型 3.数组可以直接通过下标访问 ArrayList 1.不必在声明ArrayList时指定它的长度,这是由于Arr ...

  8. S老师 Top-Down RPG Starter Kit 学习

    character creation using UnityEngine; using System.Collections; public class CharacterCreation : Mon ...

  9. JSON数据的处理中的特殊字符

    JSON现在是很常见的处理数据的方式了.但由于自己使用的是反射获取数据,必须自己处理特殊字符,但总是发现有一些看不见的字符在前台 var obj = jQuery.parseJSON(msg);会转换 ...

  10. APACHE REWRITE ? 匹配问号的写法

    RewriteRule 不会去匹配 ? 后面的字符串,需要用RewriteCond来匹配 把 /abc?id=123  =>  /def.php?id=123 的写法:   RewriteEng ...