就像JS中常常会根据条件(比如if/else、switch)返回不同的值,React中也可以根据组件的状态或其他参考条件返回不同的React Element。

比如根据用户是否登陆渲染对应的UI面板。

 1 class LoginControl extends React.Component {
 2   constructor(props) {
 3     super(props);
 4     this.handleLoginClick = this.handleLoginClick.bind(this);
 5     this.handleLogoutClick = this.handleLogoutClick.bind(this);
 6     this.state = {isLoggedIn: false};
 7   }
 8
 9   handleLoginClick() {
10     this.setState({isLoggedIn: true});
11   }
12
13   handleLogoutClick() {
14     this.setState({isLoggedIn: false});
15   }
16
17   render() {
18     const isLoggedIn = this.state.isLoggedIn;
19
20     let button = null;
21     if (isLoggedIn) {
22       button = <LogoutButton onClick={this.handleLogoutClick} />;
23     } else {
24       button = <LoginButton onClick={this.handleLoginClick} />;
25     }
26
27     return (
28       <div>
29         <Greeting isLoggedIn={isLoggedIn} />
30         {button}
31       </div>
32     );
33   }
34 }
35
36 ReactDOM.render(
37   <LoginControl />,
38   document.getElementById('root')
39 );

Class: constructor(props+state+binded-handler)  + handler +render( return React Elements))

该结构中,只有render函数内用JSX最终输出React Elements。

inline-if:

可以用&&操作符 充当if,左边为真时再执行右边,否则跳过。

 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   );

inline-if-else:

1     <div>
2       The user is <b>{isLoggedIn ? 'currently' : 'not'}</b> logged in.
3     </div>

当条件比较复杂时,推荐将组件的模板拆分。

隐藏组件:

当希望组件隐藏时,让其返回null即可。不过这并不影响到生命周期函数的执行。 componentWillUpdate 和componentDidUpdate依然会被触发哦。

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

转载于:https://www.cnblogs.com/alan2kat/p/7466689.html

React:Conditional Rendering(条件渲染)相关推荐

  1. React - Initial Rendering(初始化渲染)

    React - Initial Rendering(初始化渲染) 以下内容均从源码角度分析,UI更新本质上是数据更改(props或者state) = render(state).React提供了一种直 ...

  2. react把表格渲染好ui_在React中实现条件渲染的7种方法

    借助react,我们可以构建动态且高度交互的单页应用程序,充分利用这种交互性的一种方法是通过条件渲染. 条件渲染一词描述了根据某些条件渲染不同UI标签的能力.在react文档中,这是一种根据条件渲染不 ...

  3. react 条件渲染

    在 React 中,你可以创建不同的组件来封装各种你需要的行为.然后还可以根据应用的状态变化只渲染其中的一部分. React 中的条件渲染和 JavaScript 中的一致,使用 JavaScript ...

  4. web前端高级React - React从入门到进阶之React条件渲染

    系列文章目录 第一章:React从入门到进阶之初识React 第一章:React从入门到进阶之JSX简介 第三章:React从入门到进阶之元素渲染 第四章:React从入门到进阶之JSX虚拟DOM渲染 ...

  5. React条件渲染、列表渲染和组件传值

    React中实现v-show 父组件 import React from "react"; import Child4 from "./components/Child4 ...

  6. CSharpGL(30)用条件渲染(Conditional Rendering)来提升OpenGL的渲染效率

    CSharpGL(30)用条件渲染(Conditional Rendering)来提升OpenGL的渲染效率 当场景中有比较复杂的模型时,条件渲染能够加速对复杂模型的渲染. 条件渲染(Conditio ...

  7. React中文文档之Conditional Rendering

    Conditional Rendering - 有条件的渲染 在React中,你可以创建唯一的组件,来封装你需要的行为.之后,你可以仅仅渲染它们中的一些,这取决于你应用的状态. React中的有条件的 ...

  8. react 条件渲染_React中的条件渲染语法

    react 条件渲染 为什么我们不能使用If-Else以及三元运算符如何提供帮助 (Why We Can't Use If-Else and How the Ternary Operator can ...

  9. 条件渲染之react高阶组件——HOC

    定义:它接受任何输入(多数时候是一个组件)并返回一个组件作为输出.返回的组件是输入组件的增强版本,并且可以在 JSX 中使用.不是react api而是一种设计模式. 作用:强化组件,复用逻辑,提升渲 ...

最新文章

  1. 【Qt】Linux上设置自启动后qApp->applicationDirPath()的返回值问题
  2. GDB与远程(交叉)GDB调试
  3. PATH和CLASSPATH
  4. 视+AR正式发布EasyAR引擎2.0版,并宣布开放AR相机平台
  5. css 各浏览器里的不同
  6. python基础语法、数据结构、字符编码、文件处理 练习题
  7. 如何高效的使用Google
  8. 王思聪吃热狗 - 飞机大战小游戏
  9. 二广高速公路4标段道路设计--武汉理工大学本科生毕业设计
  10. 实验3matlab的符号运算,实验MATLAB符号运算
  11. java 序列号怎么获取,Java获得硬盘和主板的序列号代码
  12. matlab 画温度分布,matlab画温度分布图
  13. 金山打字专业文章计算机,练打字试卷_推荐几篇适合学生练习打字的文章_淘题吧...
  14. Linux与Windows命令行杀死端口命令
  15. windows使用批处理bat控制打印机自动打印测试页(可设置定时自动打印)
  16. Sidecar:让 iPad 成为 Mac Mini 外接显示屏
  17. python语法速记, Python 3 Cheat Sheet
  18. 春联大全·七字联(1)
  19. Python中rect属性
  20. 列联表中的相关测量(卡方值与相关系数之间的转换)

热门文章

  1. 如何提高生产力(四)、兼职为什么很难操作?
  2. Android 之 ProgressDialog用法介绍
  3. DevExpress.XtraGrid.Views.Grid.GridView 选中行焦点的滚动条的位置
  4. 如何判断链表中存在环路
  5. 带UpdatePanel页面返回js问题
  6. Fabric学习笔记(一)- Centos 7下的Fabric 2.3.2环境搭建
  7. PostgreSQL相关知识概念
  8. Kafka的rebalance机制
  9. Intellij Idea插件利器推荐大全
  10. Struts2之HttpServletRequest、HttpServletResponse,HttpSession,Parameters处理