React学习笔记(六)事件处理
React学习笔记(六)
五、事件处理
- React事件绑定属性的命名采用驼峰写法,不同于传统DOM全部小写。
- 如果采用JSX的语法,事件函数需要用大括号
{}包裹函数名,不同于传统DOM字符串小括号的方式。
<button onClick={ activateLasers }>
Activate Lasers
</button>
- 在React中另一个不同是你不能使用返回
false的方式阻止默认行为,必须明确使用preventDefault来阻止。
function handleClick() {
e.preventDefault();
console.log('The link was clicked.');
}
return (
<a href="#" onClick={ handleClick }>
CLICK ME
</a>
);
React通常在元素初始渲染的时候提供一个事件,然后绑定给元素即可:
class Toggle extends React.Component {
constructor(props) {
super(props);
this.state = {
isToggleOn: true
};
this.handleClick = this.handleClick.bind(this);
}
handleClick() {
this.setState(prevState => ({
isToggleOn: !prevState.isToggleOn
}));
}
render() {
return (
<button onClick={ this.handleClick }>
{ this.state.isToggleOn ? 'ON' : 'OFF' }
</button>
);
}
}
ReactDOM.render(
<Toggle />,
document.querySelector('#root')
);

注意这里使用了bind方法来指向this为当前类的实例。如果不想使用bind可以使用【属性初始化器】来解决。
class Toggle extends React.Component {
constructor(props) {
super(props);
this.state = {
isToggleOn: true
};
// this.handleClick = this.handleClick.bind(this);
}
// 这里使用了箭头函数
// React文档称为【属性初始化器】
// React文档推荐使用这两种方式
handleClick = () => {
this.setState(prevState => ({
isToggleOn: !prevState.isToggleOn
}));
}
render() {
...
}
}
ReactDOM.render(
<Toggle />,
document.querySelector('#root')
);
还可以在回调函数中使用箭头函数(这样做可能有性能问题):
如果这个回调函数作为一个属性值传入低阶组件,这些组件可能会进行额外的重新渲染。
class Toggle extends React.Component {
constructor(props) {
...
}
handleClick() {
...
}
render() {
// 这里使用了箭头函数
return (
<button onClick={ e => this.handleClick(e) }>
{ this.state.isToggleOn ? 'ON' : 'OFF' }
</button>
);
}
}
ReactDOM.render(
<Toggle />,
document.querySelector('#root')
);
1. 向事件处理程序传递参数
两种方式:
- 箭头函数
<button onClick={ e => this.deleteRow(id, e) }>Delete Row</button> - bind方法
<button onClick={ this.deleteRow.bind(this, id) }>Delete Row</button>
通过箭头函数传递的参数就是方法被调用写得顺序入参。
而bind方法传递的参数,整体排在e事件对象前面:
class Popper extends React.Component {
constructor() {
super();
this.state = {
name: 'Hello world!',
id: '001'
};
}
preventPop(id, name, e) {
e.preventDefault();
alert(id + ': ' + name);
}
render() {
return (
<div>
<p>Pass Params</p>
{ /* Pass params via bind() method. */ }
<a href="https://google.com" onClick={ this.preventPop.bind(this, this.state.id, this.state.name) }>Click Me</a>
</div>
);
}
}
ReactDOM.render(
<Popper />,
document.querySelector('#root')
);
运行效果:

The end... Last updated by: Jehorn, April 15, 2019, 6:30 PM
React学习笔记(六)事件处理的更多相关文章
- React学习笔记(一)- 入门笔记
React入门指南 作者:狐狸家的鱼 本文链接:React学习笔记 GitHub:sueRimn 1.组件内部状态state的修改 修改组件的每个状态,组件的render()方法都会再次运行.这样就可 ...
- React学习笔记(七)条件渲染
React学习笔记(七) 六.条件渲染 使用if或条件运算符来创建表示当前状态的元素. 可以使用变量来存储元素.比如: let button = null; if (isLoggedIn) { but ...
- java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)
java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessCo ...
- react学习笔记1--基础知识
什么是react A JAVASCRIPT LIBRARY FOR BUILDING USER INTERFACES[React是一个用于构建用户界面的JavaScript库.] React之所以快, ...
- React学习笔记--程序调试
React学习笔记 二 程序调试 前面我们搭建好了React的基本开发环境,可以编写基本的React js程序了.但完成的开发环境肯定包含调试器,怎么调试用React编写的JS程序呢?有浏览器,比 ...
- Learning ROS for Robotics Programming Second Edition学习笔记(六) indigo xtion pro live
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...
- Typescript 学习笔记六:接口
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- python3.4学习笔记(六) 常用快捷键使用技巧,持续更新
python3.4学习笔记(六) 常用快捷键使用技巧,持续更新 安装IDLE后鼠标右键点击*.py 文件,可以看到Edit with IDLE 选择这个可以直接打开编辑器.IDLE默认不能显示行号,使 ...
- Go语言学习笔记六: 循环语句
Go语言学习笔记六: 循环语句 今天学了一个格式化代码的命令:gofmt -w chapter6.go for循环 for循环有3种形式: for init; condition; increment ...
随机推荐
- vue之生命周期的一点总结
vue的生命周期的过程提供了我们执行自定义逻辑的机会,好好理解它的生命周期,对我们很有帮助. 一.vue实例的生命周期(vue2.0) 二.生命周期描述:(参考截图) 三.例子 window.vm = ...
- Mac上微信小程序官方开发工具卡死的问题
Mac上微信小程序官方开发工具打开后卡死,无法操作,也关不掉,解决方案: 三步: 1.在应用中删除“微信web开发者工具” 2.删除一下几个配置和缓存文件: 1.-/Library/Applicati ...
- Python——如何搭建Python的环境
最近在学Python,只知道python一般是用来写爬虫的,以前看过一个朋友用Python做的爬虫从妹子图网站上下载图片,觉得很有趣,自己也想学一学. 俗话说,万事开头难,首先第一步就是搭建Pytho ...
- zabbix自动发现与自动注册及SNMP监控
自动发现与自动注册 自动发现:zabbix Server主动发现所有客户端,然后将客户端登记自己的小本本上,缺点zabbix server压力山大(网段大,客户端多),时间消耗多. 自动注册:zabb ...
- sql sever 执行较大的文件脚本
1.用管理员身份打开cmd工具 2.执行命令 osql -S localhost -U sa -P 123456 -i D:/test.sql -S 服务器地址 本地可简写 . -U 用户名 -P ...
- php 在函数前面加个@的作用
@是错误控制运算符,用屏蔽错误提示比如:@mysql_connect() 不会出现Warning, 而原来mysql_connect 会在页面上访提示Warning.主要是高版本的php不在支持mys ...
- Google Voice号码使用说明及用途
Google Voice号码使用说明及用途 号码 已不能网页注册获取,直接向TB购买,搜Google Voice就行了.很便宜的. 一. Google Voice介绍 Google Voice首先是一 ...
- g2o error
/home/lzp/slamtest/graduationcode/p3/poseestimation/pose_estimation_3d2d.cpp: In function ‘void bund ...
- CentOS 安装Parallels Tools
为了做到Mac和Linux之间共享文件夹,因此需要安装Parallels Tool, 具体安装步骤可以参考 install parallels tool for linux guest http:// ...
- Hunger Snake3