不管是在原生的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. 压缩文件破解rarcrack-支持格式zip,rar和7z

    Kali上没有,需要自己安装 apt-get install rarcrack 安装成功后, 新建一个文本文档,元素: <?xml version="1.0" encodin ...

  2. Go Example--方法

    package main import "fmt" //定义结构体 type rect struct { width,height int } //定义结构体指针的方法 func ...

  3. 【BZOJ2019】nim

    直播写题这刺激233 原题: 著名游戏设计师vfleaking,最近迷上了Nim.普通的Nim游戏为:两个人进行游戏,N堆石子,每回合可以取其中某一堆的任意多个,可以取完,但不可以不取.谁不能取谁输. ...

  4. centos7如何安装zabbix

    只需要按照第三次修改版本的内容安装就可以了(水平线内的内容),主要是执行两个脚本就可以完成自动化安装了,其他内容是以前写的,仅留下来作为参考 第三次修改:(此次为zabbix4.0版本的,进一步的自动 ...

  5. drone secret 使用

      drone 的secret 可以让我们方便的对于需要保密的信息的隐藏,减少账户信息的泄密 环境准备 docker-compose 文件 version: '3' services: drone-s ...

  6. C# to IL 4 Keywords and Operators(关键字和操作符)

    Code that is placed after the return statement never gets executed. In the first programgiven below, ...

  7. 解决winfrom下TextBox不支持透明背景色

    不知道微软扯什么拉鸡蛋子,居然有控件不支持透明,我实在想喷设计的人脑残.尤其可恨的是TextBox不支持,更可恨的是直到最新版.net4.6也不支持.源码又看不见,具体实现细节都不知道,谁能改得动?这 ...

  8. 替换元素(replace,replace_if,replace_copy,replace_copy_if)

    replace 审阅range中的每个元素,把old_value替换为new_value template <class ForwardIterator,class T> void rep ...

  9. JavaScript数组的一些奇葩行为

    今天,复习了一下JavaScript的数组,然后,把他的一些奇葩行为总结了一下,在这里和大家share一下,如果有不对的地方,欢迎指出! 奇葩1:Array()构造器函数可以不使用new关键字进行调用 ...

  10. Revit API 操作共享参数和项目参数

    1.获取共享参数 private string GetSharInfo(Autodesk.Revit.ApplicationServices.Application revitApp) { Strin ...