Handling Events

React元素的事件处理非常类似于对DOM元素添加事件处理,但有一部分的语法不同:

1.React事件使用camelCase(驼峰命名法)来进行命名,而不是小写字母

2.JSX需要传递一个函数作为事件处理函数,而不是一个字符串。

  1. //DOM元素的事件处理函数
  2. <button onclick="activateLaser()">
  3. Activate Lasers
  4. </button>
  1. //React元素的事件处理函数
  2. <button onClick={activateLasers} >
  3. Activate Lasers
  4. </button>

3.不能够通过返回一个false来阻止默认操作。必须调用preventDefault

  1. //DOM元素事件处理阻止默认操作
  2. <a href="#" onclick="console.log('The link was clicked.'); return false;">
  3. Click me
  4. </a>
  5. //React元素
  6. function ActionLink() {
  7. //e是事件的各种信息,是根据W3C标准定义的。不需要考虑浏览器兼容问题
  8. function handleClick(e) {
  9. e.preventDefault();
  10. console.log('The link was clicked.');
  11. }
  12. return (
  13. <a href="#" onClick={handleClick}>
  14. Click me
  15. </a>
  16. )
  17. }

4.在JSX的回调函数中,要注意this的含义,JavaScript中,类方法并不属于任何运行形式,所以如果忘记绑定类的this给事件处理函数的话,那么this在事件处理函数中会变成undefined。如果你不带()来调用一个方法的时候,必须要绑定类的this给事件处理函数。如果这样很麻烦的话,可以使用箭头运算符来定义方法。或者使用箭头运算符来进行回调函数调用。

Conditional Rendering

1.在React中,你可以创建不同的组件,并且渲染其中的一部分,这取决于你应用的状态。状态渲染和JavaScript中的分支运算符有一样的效果,使用JavaScript中的类似if运算符来创建元素来代表当前状态,然后让React更新UI去匹配。

  1. if(this.state.isLogin){
  2. return(
  3. <div>
  4. <Greeting></Greeting>
  5. <button onClick={this.changeState}>修改状态</button>
  6. </div>)
  7. }else{
  8. return(
  9. <div>
  10. <Login></Login>
  11. <button onClick={this.changeState}>修改状态</button>
  12. </div>)
  13. }

2.元素变量可以使用变量来存储元素,可以帮助你在保证其他部分的输出不变的情况下,选择性的渲染一部分组件。

  1. render() {
  2. const isLoggedIn = this.state.isLoggedIn;
  3. let button = null; //通过if条件语句来进行渲染
  4. if (isLoggedIn) {
  5. button = <LogoutButton onClick={this.handleLogoutClick} />
  6. } else {
  7. button = <LoginButton onClick={this.handleLoginClick} />
  8. }
  9. return (
  10. <div>
  11. <Greeting isLoggedIn={isLoggedIn} />
  12. {button}
  13. </div>
  14. );
  15. }

2.使用&&运算符实现行内逻辑

根据JavaScript的语法:true && expression的值永远都是expression,而false && expression的值一直都是false。所以,如果条件表达式的结果为true,那么就会直接返回后面的值,如果结果为false则React会忽略并且跳过后面的表达式。

  1. return (
  2. <div>
  3. <h1>Hello!</h1>
  4. { unreadMessages.length > 0 &&
  5. <h2>
  6. You have {unreadMessages.length} unread messages.
  7. </h2>
  8. }
  9. </div>
  10. );

3.行内if-else条件运算符另外一种实现行内渲染元素中的JavaScript条件表达式的是三目运算符condition ? true : false,下面的代码中使用了三目运算符。

  1. render() {
  2. const isLoggedIn = this.state.isLoggedIn;
  3. return (
  4. <div>
  5. The user is <b> {isLoggedIn ? 'currently' : 'not'}</b> logged in.
  6. </div>
  7. );
  8. }

4.阻止组件渲染在小部分情况下,你可能需要让一个元素隐藏。可以让render返回null而不是一个组件。

  1. render() {
  2. return (
  3. <div>
  4. <WarningBanner warn={this.state.showWarning}>
  5. </WarningBanner>
  6. <button onClick={this.handleToggleClick}>
  7. {this.state.showWarning ? 'Hide' : 'Show'}
  8. </button>
  9. </div>
  10. );
  11. }

总结

  1. 从上面我们可以学到:
  2. 关于Handling Events(事件处理)JSX的语法与JS的四点不同:
  3. 1.JSX用驼峰命名事件,JS用小写字母;
  4. 2.JSX的事件处理函数语法 {函数名} JS"函数名()"
  5. 3.JSX调用preventDefault()来阻止默认操作,JS则通过return false
  6. 4.JSX的回调函数中,需要绑定类的this给事件函数,
  7. 可在初始化时绑定(this.handleLoginClick = this.handleLoginClick.bind(this);)
  8. 或在具体使用该函数的地方绑定({this.handleLoginClick.bind(this)}),
  9. JS不用绑定(onClick="doHandle(this);"),还可以用箭头运算符来定义方法或调用回调函数。
  10. 关于Conditional Rendering 可以用变量来存储元素,然后根据流程控制语句以及逻辑运算符
  11. return需要的变量值,若想阻止渲染则return null

25-React事件处理及条件渲染的更多相关文章

  1. 【译】在React中实现条件渲染的7种方法

    原文地址:https://scotch.io/tutorials/7-ways-to-implement-conditional-rendering-in-react-applications 借助R ...

  2. React 学习(五) ---- 条件和列表渲染

    条件渲染 React中的条件渲染和我们平常写的js 代码一样,都是用的if else, 只不过在if else 中它的返回值是jsx, 根据不同的条件渲染不同的UI. 先写两个组件 //登录的用户显示 ...

  3. react初探(一)之JSX、状态(state)管理、条件渲染、事件处理

    前言: 最近收到组长通知我们项目组后面新开的项目准备统一技术栈为react,目前我的情况是三大框架只会angular和Vue.在实际项目中只使用过一次angular5,其余项目都是使用Vue写的.写篇 ...

  4. &&运算符,三木运算符与React的条件渲染

    在使用react框架的时候中往往会遇到需要条件渲染的情形,这时候,许多人会设想采用if语句来实现,比如下面,当满足条件condition时,conditonRender渲染组件ComponentA,当 ...

  5. react 入坑笔记(五) - 条件渲染和列表渲染

    条件渲染和列表渲染 一.条件渲染 条件渲染较简单,使用 JavaScript 操作符 if 或条件运算符来创建表示当前状态的元素,然后让 React 根据它们来更新 UI. 贴一个小栗子: funct ...

  6. angular,vue,react的基本语法—双向数据绑定、条件渲染、列表渲染、angular小案例

    基本语法: 1.双向数据绑定 vue 指令:v-model="msg" react constructor(){ this.state{ msg:"双向数据绑定" ...

  7. React文档(八)条件渲染

    在React中,你可以创建不同的组件各自封装你需要的东西.之后你可以只渲染其中的一部分,这取决于应用的state(状态). 条件渲染在React里就和js里的条件语句一样.使用js里的if或者条件表达 ...

  8. 2017.11.7 ant design - upload 组件的使用, react 条件渲染以及 axios.all() 的使用

    一.主要任务:悉尼小程序管理后台,添加景点页面的开发 二.所遇问题及解决 1. 上传多个不同分类音频信息时,如中文音频和英文音频,要求音频不是放在一个数组中的,每个音频是一个独立的字段,此时: < ...

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

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

随机推荐

  1. Windows 服务入门指南

    有很多时候,我们需要创建Windows Service. 这篇文章可以算是一个入门指南吧,希望对初学者有帮助. 要创建Windows Service, 首先选择Windows服务项目,如下图: 这里我 ...

  2. ANDROID模拟火花粒子的滑动喷射效果

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 开篇废话: 年前换了一个手机,SONY的Z3C.这个手机在解锁屏幕时有一个滑动动画,类似火 ...

  3. FRM-92101解决办法

    /u02/UAT/inst/apps/UAT_newerp3/logs/ora/10.1.3/opmn/forms_default_group_1/ http://blog.csdn.net/orth ...

  4. 利用API 建立Dependent Value Set

    . 建立SET fnd_flex_val_api.create_valueset_independent(v_set_name ,v_description ,v_security ,v_enable ...

  5. 「Ruby && Sqlite3」How to install sqlite3 for ruby? (solve: sqlite-ruby no such file...)

    error message:           no such file .... 安装 gem install sqlite3-ruby -- --with-sqlite3-dir=/usr/lo ...

  6. SQL UNION 操作符

    转由http://www.w3school.com.cn/sql/sql_union.asp 这个网址的数据库知识,个人推荐,因为有实例,理解更透彻一些.非广告啊,个人感觉好啊 SQL UNION 操 ...

  7. Android之自定义生成彩色二维码

    先导个zxing.jar包 下面是xml布局 activity_main.xml <RelativeLayout xmlns:android="http://schemas.andro ...

  8. Linux/Unix笔记本

    Linux介绍 Linux入门——个人感想 Google怎么用linux 初入Linux Windows XP硬盘安装Ubuntu 12.04双系统图文详解 实例讲解虚拟机3种网络模式(桥接.nat. ...

  9. Android NDK开发(五)--C代码回调Java代码【转】

    转载请注明出处:http://blog.csdn.net/allen315410/article/details/41862479 在上篇博客里了解了Java层是怎样传递数据到C层代码,并且熟悉了大部 ...

  10. UserSelector兼容

    1.更新到asp.net2.0或以上,将Microsoft.Web.UI.TreeView更换为新的System.Web.UI.WebControls.TreeView 2.将UserId,UserT ...