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. django notes 六:数据库 CRUD 操作

    CRUD 也没什么可说的,django 提供了完善的 orm  api, 直接用就行了. 我只贴几个列子,一看就明白了,自己再用用就熟了. # create b = Blog(name='Beatle ...

  2. 使用KindEditor完成图片上传(springmvc&fastdfs/springmvc&ftp)

    前端使用KindEditor,后台使用Springmvc 1 拷贝KindEditor相关文件到项目中 拷贝KindEditor相关文件到项目中 2 准备一个jsp页面 页面中我准备了一个超链接,点击 ...

  3. CentOS7服务管理(重启,停止,自动启动命令)

    我们对service和chkconfig两个命令都不陌生,systemctl 是管制服务的主要工具, 它整合了chkconfig 与 service功能于一体. systemctl is-enable ...

  4. PHP之string

    string addcslashes() Quote string with slashes in a C style 以 C 语言风格使用反斜线转义字符串中的字符 addslashes() Quot ...

  5. Maven项目版本继承 – 我必须指定父版本?

    问题描述 我有两个项目:父项目:A,子项目:B 在A /pom.xml中: <groupId>com.dummy.bla</groupId> <artifactId> ...

  6. ZOJ 2971 Give Me the Number

    Give Me the Number Numbers in English are written down in the following way (only numbers less than  ...

  7. ASP.NET Core 集成 WebSocket

    1. 环境 AspNetCore Web 2.0 (MVC) Windows 10 IIS 10 Express/IIS VS 2017 2.如何配置 在已有的或者新创建的 AspNet Core M ...

  8. H5微信自定义分享链接(设置标题+简介+图片)

    起源:最近公司在做招募广告的html5页面,然后做出来后,产品提出一个问题,需要分享出去的链接是卡片形式,内容也要自己定义,这下就难到我了,因为是第一次遇到这种需求,果断百度,然而,我就像大家一样,看 ...

  9. Java泛型的逆变

    在上篇<Java泛型的协变>这篇文章中遗留以下问题——协变不能解决将子类型添加到父类型的泛型列表中.本篇将用逆变来解决这个问题. 实验准备 我们首先增加以下方法,见代码清单1所示. 代码清 ...

  10. C# 扩展方法一

    1. 何为扩展方法 扩展方法是C#3.0引入的语法特性,是一种特殊的静态方法.它使得我们能向现有的数据类型“动态”添加方法,而不需要创建行的派生类型.重新编译或直接修改原始类型的源代码. 注意扩展方法 ...