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. hadoop-2.6.0.tar.gz + spark-1.5.2-bin-hadoop2.6.tgz的集群搭建(单节点)(Ubuntu系统)

    前言 本人呕心沥血所写,经过好一段时间反复锤炼和整理修改.感谢所参考的博友们!同时,欢迎前来查阅赏脸的博友们收藏和转载,附上本人的链接.http://www.cnblogs.com/zlslch/p/ ...

  2. ajax从零基础到实战

    一. 什么是AJAX? ajax是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. 二. 在项目中怎么运用AJAX? 项目主要文件夹目录有img文件夹,css文件夹,js文件夹,如果你要运 ...

  3. C语言20150620

    1-->printf()输出的时候前面没有0 是十进制,前面带0是八进制,前面有0x是十六进制 printf("%d",100):十进制解析 printf("%d& ...

  4. SQL Server学习3

    SQL Server服务的管理 SQL Server服务 可以提供数据的存储,处理,受控访问,是SQL Server系统最基本的服务 SQL Server Analysis Server服务 为商业智 ...

  5. Swift函数_默认参数

    swift中提供了默认参数功能,在声明函数时给参数指定默认值. 例: func inputStudentInfo(name:String,age:Int="26") { print ...

  6. 面向对象(基础oop)之继承总结

    大家好,我叫李京阳,,很高兴认识大家,之所以我想开一个自己的博客,就是来把自己所了解的知识点通过自己的话写一下,希望被博客园的朋友们点评和一起讨论一下,也希望从博客园中多认识一些软件开发人员!现在我开 ...

  7. 最全的HTTP 响应状态码列表!

    摘要: HTTP状态码,我们要学会现查现用能记住最好. 简单举例几个常用的状态码,比如200,302,304,404, 503. 一般来说我也只需要了解这些常用的状态码就可以了.如果是做AJAX,RE ...

  8. 使用 NamedScope 扩展 Ninject 的 InRequestScope

    背景 C#,Ninject,定期执行某计划任务.首先想到的是使用 Quartz 来安排计划任务,于是看是否有相应的集成.果然有:https://github.com/dtinteractive/Nin ...

  9. Catalan数的通项公式(母函数推导)

    首先 \[h_n=\sum_{i}h_ih_{n-i-1}\] 写出 \(h\) 的母函数 \(H(x)\) 那么 \[H(x)=H^2(x)x+1,H(x)=\frac{1-\sqrt{1-4x}} ...

  10. less教程

    平时在工作中,偶尔会遇到老大让你修改原来写好的样式,如果修改的多的话,修改起来是非常麻烦的.他不像js一样,定义变量.函数,需要修改某些值,直接修改方法就行了.less的出现,恰恰帮我们解决了这个问题 ...