React 条件渲染组件

news/2024/11/24 8:29:03/

组件通常需要根据不同的条件显示不同的内容,以及根据应用的状态变化只渲染其中的一部分。

React 中,可以使用 JavaScript 语法有条件地呈现 JSX,比如 if 语句、&&?: 操作符。

根据条件返回 JSX

Demo.js 文件:

function Item ({ name, isPacked }) {if (isPacked) {return <li className="item">{name}</li>;}return <li className="item">{name}</li>;
}export default function PackingList () {return (<section><h1>Conditionally returning JSX demo</h1><ul><ItemisPacked={true}name="I like apple"/><ItemisPacked={true}name="He likes banana"/><ItemisPacked={false}name="She likes watermelon"/></ul></section>);
}

页面效果:
在这里插入图片描述

阻止组件渲染

在极少数情况下,希望隐藏组件,即使它被其他组件渲染。可以让 render 方法返回 null 而不是它的渲染结果即可实现。

在下面的例子中,<Item /> 根据属性 isPacked 的值条件渲染。如果 isPacked 的值是 true,则组件不会渲染:

function Item ({ name, isPacked }) {if (isPacked) {return null;}return <li className="item">{name}</li>;
}export default function PackingList () {return (<section><h1>Conditionally returning JSX demo</h1><ul><ItemisPacked={true}name="I like apple"/><ItemisPacked={true}name="He likes banana"/><ItemisPacked={false}name="She likes watermelon"/></ul></section>);
}

页面效果:
在这里插入图片描述
组件的 render 方法返回 null 并不会影响该组件生命周期方法的回调。例如,componentWillUpdatecomponentDidUpdate 依然可以被调用。

条件包含在 JSX 中

三元表达式(? :)

function Item ({ name, isPacked }) {return <li className="item">{isPacked ? name + ' ✔' : name}</li>;
}export default function PackingList () {return (<section><h1>Conditionally returning JSX demo</h1><ul><ItemisPacked={true}name="I like apple"/><ItemisPacked={true}name="He likes banana"/><ItemisPacked={false}name="She likes watermelon"/></ul></section>);
}

页面效果:
在这里插入图片描述

也可以将表达式包裹在另一个 HTML 标记中,如下:

function Item ({ name, isPacked }) {return <li className="item">{isPacked ? (<del>{name + ' ✔'}</del>) : (name)}</li>;
}export default function PackingList () {return (<section><h1>Conditionally returning JSX demo</h1><ul><ItemisPacked={true}name="I like apple"/><ItemisPacked={true}name="He likes banana"/><ItemisPacked={false}name="She likes watermelon"/></ul></section>);
}

页面效果:
在这里插入图片描述

逻辑与运算符 (&&)

可以通过用花括号包裹代码在 JSX 中嵌入任何表达式 ,也包括 JavaScript 的逻辑与 &&,它可以方便地条件渲染一个元素。

上面的写法也可以改写成如下:

function Item ({ name, isPacked }) {return <li className="item">{name}{isPacked && ' ✔'}</li>;
}export default function PackingList () {return (<section><h1>Conditionally returning JSX demo</h1><ul><ItemisPacked={true}name="I like apple"/><ItemisPacked={true}name="He likes banana"/><ItemisPacked={false}name="She likes watermelon"/></ul></section>);
}

页面效果:
在这里插入图片描述

JavaScript 中,true && expression 总是返回 expression,而 false && expression 总是返回 false

因此,针对上面的例子,如果 isPacked 条件是 true&& 右侧的元素就会被渲染,如果是 falseReact 会忽略并跳过它。

元素变量

可以使用变量来储存元素实现有条件的渲染组件的一部分,而输出的其他部分不会更改。如下:

function Item ({ name, isPacked }) {let str = name + '❌'if (isPacked) {str = (<del>{name + ' ✔'}</del>)}return (<li className="item">{str}</li>)
}export default function PackingList () {return (<section><h1>Conditionally returning JSX demo</h1><ul><ItemisPacked={true}name="I like apple"/><ItemisPacked={true}name="He likes banana"/><ItemisPacked={false}name="She likes watermelon"/></ul></section>);
}

页面效果:
在这里插入图片描述


http://www.ppmy.cn/news/47256.html

相关文章

Spring之 @Configuration

Spring 提供了丰富的特性和功能&#xff0c;包括依赖注入、面向切面编程、事务管理、数据访问、Web应用程序开发等。其中&#xff0c;Configuration 是 Spring 中的一个注解&#xff0c;它用于标记一个类为配置类&#xff0c;通过配置类可以定义和组装 Spring Bean&#xff0c;…

缓存优化---环境搭建

缓存优化 为什么要使用redis缓存&#xff1f; 问题说明 用户数量多&#xff0c;系统访问大&#xff0c;频繁访问数据库&#xff0c;系统性能下降&#xff0c;用户体验差 环境搭建 maven坐标 在项目中的pom.xml文件中导入spring data redis的maven坐标&#xff1a; <depen…

数据结构---二叉树

专栏&#xff1a;数据结构 个人主页&#xff1a;HaiFan. 专栏简介&#xff1a;这里是HaiFan.的数据结构专栏&#xff0c;今天的内容是二叉树。 二叉树 树的概念及结构二叉树概念及结构二叉树的概念二叉树的存储结构 二叉树的顺序结构及实现大根堆和小根堆堆的实现及其各个接口堆…

DLRover: 云上自动扩缩容 DeepRec 分布式训练作业

背景 如今&#xff0c;深度学习已广泛应用在搜索、广告、推荐等业务中&#xff0c;这类业务场景普遍有两个特点&#xff1a; 1&#xff09;训练样本量大&#xff0c;需要分布式训练提升训练速度&#xff1b; 2&#xff09;模型稀疏&#xff0c;即模型结构中离散特征计算逻辑占…

【Vue】学习笔记-Vue生命周期

引出生命周期 生命周期 a.又名生命周期回调函数、生命周期函数、生命周期钩子 b.是什么&#xff1a;vue 在关键时刻帮助我们调用一些特殊名称的函数 c.生命周期函数的名字不可更改&#xff0c;但函数的具体内容是程序员根据需求编写的 d.生命周期函数中的this指向是vm或组件实…

SpringBoot 表单提交全局日期格式转换器

参考资料 SpringBoot–LocalDateTime格式转换(前端入参)SpringBoot InitBinder注解绑定请求参数 目录 一. 实现Converter<S, T>接口的方式二. 全局ControllerAdvice InitBinder注解的方式三. RequestMappingHandlerAdapter的方式四. 效果 分析 ⏹当前台的提交数据的Con…

计及氢能的综合能源优化调度研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

AI数据标注工程师这个职业怎么样?

本篇文章主要讲解ai数据标注工程师这个职业的具体情况和相关的职业前景 作者&#xff1a;任聪聪 日期&#xff1a;2023年4月18日 数据是ai的灵魂&#xff0c;自然界中相对应的数据都活多少存在不准确、杂乱、无效等属性&#xff0c;需要人为进行收集、整理、分类和处理。其中ai…