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学习笔记(六)事件处理的更多相关文章

  1. React学习笔记(一)- 入门笔记

    React入门指南 作者:狐狸家的鱼 本文链接:React学习笔记 GitHub:sueRimn 1.组件内部状态state的修改 修改组件的每个状态,组件的render()方法都会再次运行.这样就可 ...

  2. React学习笔记(七)条件渲染

    React学习笔记(七) 六.条件渲染 使用if或条件运算符来创建表示当前状态的元素. 可以使用变量来存储元素.比如: let button = null; if (isLoggedIn) { but ...

  3. java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)

    java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessCo ...

  4. react学习笔记1--基础知识

    什么是react A JAVASCRIPT LIBRARY FOR BUILDING USER INTERFACES[React是一个用于构建用户界面的JavaScript库.] React之所以快, ...

  5. React学习笔记--程序调试

    React学习笔记 二 程序调试   前面我们搭建好了React的基本开发环境,可以编写基本的React js程序了.但完成的开发环境肯定包含调试器,怎么调试用React编写的JS程序呢?有浏览器,比 ...

  6. Learning ROS for Robotics Programming Second Edition学习笔记(六) indigo xtion pro live

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...

  7. Typescript 学习笔记六:接口

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  8. python3.4学习笔记(六) 常用快捷键使用技巧,持续更新

    python3.4学习笔记(六) 常用快捷键使用技巧,持续更新 安装IDLE后鼠标右键点击*.py 文件,可以看到Edit with IDLE 选择这个可以直接打开编辑器.IDLE默认不能显示行号,使 ...

  9. Go语言学习笔记六: 循环语句

    Go语言学习笔记六: 循环语句 今天学了一个格式化代码的命令:gofmt -w chapter6.go for循环 for循环有3种形式: for init; condition; increment ...

随机推荐

  1. Javac词法分析

    参考:<深入分析Java Web>技术内幕 许令波 词法分析过程涉及到的主要类及相关的继承关系如下: 词法分析的接口为Lexer,默认实现类为Scanner,Scanner会逐个读取Jav ...

  2. python-poll实现异步IO

    #!usr/bin/python from socket import * from select import * from time import ctime s=socket() s.bind( ...

  3. JavaScript设计模式-2高级类.

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. 设置spacevim字体显示乱码问题

    https://github.com/powerline/fonts clone powerline fonts 仓库 执行项目中的 install.sh 安装字体 修改终端配置中使用的字体为 xxx ...

  5. Comet:基于 HTTP 长连接的“服务器推”技术(转载)

    “服务器推”技术的应用 传统模式的 Web 系统以客户端发出请求.服务器端响应的方式工作.这种方式并不能满足很多现实应用的需求,譬如: 监控系统:后台硬件热插拔.LED.温度.电压发生变化: 即时通信 ...

  6. Softwaretechnik

    1.Einführung 1.1 Was ist Softwareentwicklung Softwareentwicklung ist eine Wissenschaftliches Fach üb ...

  7. SQL Serever学习10——T-SQL语句

    在sqlserver2018中使用的是Transact-SQL语言,简称T-SQL. 数据库的创建和管理 数据定义语言DDL DDL功能包括数据库,表,索引,视图,存储过程 数据库:CREATE DA ...

  8. 获取用户Ip地址通用方法

    1 public static function getIp() 2 { 3 if ($HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"]) 4 { ...

  9. 配置内核源码make menuconfig时出现 #include CURSES_LOC错误

    配置内核时出现如下错误: liuxin@sunshine-virtual-machine:~/work/nfs_root/system/linux-2.6.22.6$ make menuconfig ...

  10. [javaSE] 多线程(join方法)

    多条线程并发执行,随机切换,调用join()方法,会使当前线程所在的线程(一般主线程)冻结,直到当前线程结束,所在的线程才恢复继续执行 class JoinTestDemo implements Ru ...