条件渲染和列表渲染

一、条件渲染

条件渲染较简单,使用 JavaScript 操作符 if 或条件运算符来创建表示当前状态的元素,然后让 React 根据它们来更新 UI。

贴一个小栗子:

function UserGreeting(props) {

return

欢迎回来!

;

}

function GuestGreeting(props) {

return

请先注册。

;

}

function Greeting(props) {

const isLoggedIn = props.isLoggedIn;

if (isLoggedIn) {

return ;

}

return ;

}

ReactDOM.render(

// 尝试修改 isLoggedIn={true}:

,

document.getElementById('example')

);

当然,得益于 jsx 的语法,我们可以用变量来缓存元素或者组件:

function UserGreeting(props) {

return

欢迎回来!

;

}

function GuestGreeting(props) {

return

请先注册。

;

}

function Greeting(props) {

const isLoggedIn = props.isLoggedIn;

if (isLoggedIn) {

return ;

}

return ;

}

function LoginButton(props) {

return (

登陆

);

}

function LogoutButton(props) {

return (

退出

);

}

class LoginControl extends React.Component {

constructor(props) {

super(props);

this.handleLoginClick = this.handleLoginClick.bind(this);

this.handleLogoutClick = this.handleLogoutClick.bind(this);

this.state = {isLoggedIn: false};

}

handleLoginClick() {

this.setState({isLoggedIn: true});

}

handleLogoutClick() {

this.setState({isLoggedIn: false});

}

render() {

const isLoggedIn = this.state.isLoggedIn;

let button = null;

if (isLoggedIn) {

button = ;

} else {

button = ;

}

return (

{button}

);

}

}

ReactDOM.render(

,

document.getElementById('example')

);

阻止渲染的栗子:

function WarningBanner(props) {

if (!props.warn) {

return null; // 必须写 null,不写运行会报错

}

return (

警告!

);

}

class Page extends React.Component {

constructor(props) {

super(props);

this.state = {showWarning: true}

this.handleToggleClick = this.handleToggleClick.bind(this);

}

handleToggleClick() {

this.setState(prevState => ({

showWarning: !prevState.showWarning

}));

}

render() {

return (

{this.state.showWarning ? '隐藏' : '显示'}

);

}

}

ReactDOM.render(

,

document.getElementById('example')

);

注意:组件的 render 方法返回 null 并不会影响该组件生命周期方法的回调。例如,componentWillUpdate 和 componentDidUpdate 依然可以被调用。

二、列表渲染

列表渲染可以使用 js 中的 .map() 来进行。(map 返回一个经过逻辑处理的新数组)

function NumberList(props) {

const numbers = props.numbers;

const listItems = numbers.map((number) =>

{number}

);

return (

  • {listItems}

);

}

const numbers = [1, 2, 3, 4, 5];

ReactDOM.render(

,

document.getElementById('example')

);

和 vue 相同,需要给每个列表元素绑定一个 key,便于 React 识别哪些元素发生了变化。

function ListItem(props) {

return

{props.value};

}

function NumberList(props) {

const numbers = props.numbers;

const listItems = numbers.map((number) =>

);

return (

{listItems}

);

}

const numbers = [1, 2, 3, 4, 5];

ReactDOM.render(

,

document.getElementById('example')

);

注意:key 会作为给 React 的提示,但不会传递给组件,因此,组件并不会知道传递给它的 key。

在 jsx 中使用 map():

function ListItem(props) {

return

{props.value};

}

function NumberList(props) {

const numbers = props.numbers;

return (

{numbers.map((number) =>

value={number} />

)}

);

}

const numbers = [1, 2, 3, 4, 5];

ReactDOM.render(

,

document.getElementById('example')

);

对比一下,只是少了声明 listItems 语句,并把后面的 map() 搬到 jsx 中。

react把表格渲染好ui_react 入坑笔记(五) - 条件渲染和列表渲染相关推荐

  1. 《Scala入坑笔记》一、Scala简介

    Scala 是 Scalable Language 的简写,网上没有发现谁问 Scala 怎么读,你是按 Scalable 的发音读作 ['skeɪlə] 还是喜欢读作斯卡拉? Scala 是一门多范 ...

  2. 3.Vue.js前端框架:条件判断与列表渲染

    3.1 条件判断 在视图中,经常需要控制某些DOM元素的显示或隐藏.Vue.js提供了多个指令来实现条件的判断,包括 v-if.v-else.v-else-if.v-show指令.下面分别进行介绍. ...

  3. express模板引擎 html,Express新手入坑笔记之动态渲染HTML

    在日常项目中,我喜欢用Django做后端, 因为大而全 如果只是写一个简单服务的话, Express是更好的选择, Express是基于nodejs的一个后端框架,特点是简单,轻量, 容易搭建, 而且 ...

  4. Jetson Nano入坑笔记(一)

    一.准备安装 (1)电源线MicroUSB电源线 (2)SD卡最少64GB (3)无线网卡:搭载了千兆以太网卡(Edimax EW-7811UN) (4)刷系统:把镜像写入SD文件 1.下载镜像注意2 ...

  5. Redux 入坑笔记

    Redux 简要的说就是一个事件分发器和全局state控制台. Redux 有一个全局的state,通过将根组件包进Provider,将store分发给所有的子组件,而子组件通过connect方法,获 ...

  6. JanusGraph入坑笔记(五)- GraphTraversal (Vertex centric)

    目录 一.Terminal Step 二.Vertex Step (Vertex centric) 首先我们假定读者对Gremlin语句有一定的了解,那么Traversal就是对gremlin语句用j ...

  7. f1c100s入坑笔记(4)-uboot学习stepbystep-1

    一. 分析uboot之前先简单学习一下Lin参考下的汇编指令,参考 http://blog.sina.com.cn/s/blog_59b189220100au1k.html 1. Linux汇编与wi ...

  8. C++入坑系列(五)之函数指针

    前言 简而言之,函数指针就是函数的地址.我们可以与数组进行类比,数组的数组名就是数组的首地址,而函数的地址就是函数名. 获取函数的地址 在实际使用中,我们可以直接通过访问函数名的方式便可以获得函数的地 ...

  9. 遇见 vue.js --------阿文的vue.js学习笔记(8 —1)------- 列表渲染

    ** 新学习新征程,我们一起踏上学习 vue.js的新长征 遇见 vue.js --------阿文的vue.js学习笔记(1)-----初识vue.js 遇见 vue.js --------阿文的v ...

最新文章

  1. [LeetCode 题解]: Binary Tree Preorder Traversal
  2. linux中怎么删除只读变量,【Linux】【问题集锦】如何删除shell只读变量
  3. Qt 中Treewidget添加右键菜单
  4. 将SAP Analytics Cloud嵌入到SAP Cloud for Customer里去
  5. FG60B SSL ××× V3.0配置
  6. 为了不被OUT,UC决定不再安静地做个浏览器了
  7. [Android] Context应该怎么写?
  8. python重新安装_重新安装python
  9. jad环境变量配置_Jad_反编译Class文件
  10. 3D动态视频屏保热带鱼水族馆
  11. 从金山到小米,看雷军如何一步步成为“飞猪”
  12. Java HotSpot 虚拟机选项 -X -XX 的含义
  13. 《宝宝出生特别纪念日》
  14. typeof(undefined) == undefined 成立吗?
  15. 烤仔观察 | 秋天的第一口“菠萝”真的那么好吃吗?
  16. 最优化方法 23:算子分裂法 ADMM
  17. Java实现伪造邮件发信人
  18. 灵魂拷问,MySQL到底能否解决幻读问题
  19. Oracle alter table
  20. Layui的tag标签

热门文章

  1. 关于提高网页加载速度个人学习以及经验总结
  2. 小米手机上安装https证书(例如pem证书,crt证书)详解
  3. Java核心类库篇6——IO
  4. mysql5.7.14安装版_MySql5.7.14安装教程详解(解压版)_MySQL
  5. vb.net html标签,VB.Net - 获取元素html的字符串/值?
  6. 多媒体计算机技术19秋作业1,东师多媒体计算机技术19春在线作业1【标准答案】.doc...
  7. java if两个条件_java(3) if结构
  8. identity_insert 如何改为on_十分钟教你如何快速提高Laya构建速度,还不快来康康?...
  9. 当面试官问我————为什么String是final的?
  10. 教你如何一篇博客读懂设计模式之—--原型模式