怎么在React条件渲染中使用三元表达式

技术怎么在React条件渲染中使用三元表达式本篇内容介绍了“怎么在React条件渲染中使用三元表达式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大

本文介绍了“如何在React条件渲染中使用三元表达式”的知识。很多人在实际案例操作中都会遇到这样的困难。接下来,让边肖带领大家学习如何应对这些情况!希望大家认真阅读,学点东西!

00-1010假设我们有一个传入名称属性的组件。如果这个字符串不是空的,我们将显示一个问候。否则,我们会告诉用户他们需要登录。

这是一个无状态功能组件(SFC),只实现上述功能。

constMyComponent=({ name })={ if(name){ return(div class name=' hello ' hello { name }/div);} return(div类名=' hello ' please ignin/div);};这很简单,但我们可以做得更好。这是使用三元运算符条件三元运算符编写的同一个组件。

constMyComponent=({ name })=(div class name=' hello ' { name?` hello $ { name } ` : ' please ignin ' }/div);请注意,与上面的示例相比,这段代码是多么简洁。

有几点需要注意。因为我们使用箭头函数的单语句形式,所以返回语句是隐含的。此外,使用三元运算符允许我们省略重复的div className='hello '标记。

00-1010如您所见,三元表达式非常适合表示if/else条件表达式。但是简单的如果有条件呢?

让我们看另一个例子。如果isPro(布尔值)为真,我们将显示一个奖杯表情。我们还想渲染星星的数量(如果不是0的话)。我们可以这样写。

constMyComponent=({name,isPro,stars })=(div class name=' hello ' div hello { name } { isPro?null}/div{stars?(divStars: { ' ')。repeat(stars)}/div): null }/div);注意其他情况。

返回 null 。 这是因为三元表达式要有“否则”条件。

对于简单的 if 条件式,我们可以使用更合适的东西:&& 运算符。这是使用 && 编写的相同代码。

const MyComponent = ({ name, isPro, stars}) => (  <div className="hello">    <div>      Hello {name}      {isPro && '♨'}    </div>    {stars && (      <div>        Stars:{'☆'.repeat(stars)}      </div>    )}  </div>);

没有太多区别,但是注意我们消除了每个三元表达式***面的 : null (else 条件式)。一切都应该像以前一样渲染。

嘿!约翰得到了什么?当什么都不应该渲染时,只有一个 0。这就是我上面提到的陷阱。这里有解释为什么:

根据 MDN,一个逻辑运算符“和”(也就是 &&):

expr1 && expr2

如果 expr1 可以被转换成 false ,返回 expr1;否则返回 expr2。 如此,当与布尔值一起使用时,如果两个操作数都是 true&& 返回 true ;否则,返回 false

好的,在你开始拔头发之前,让我为你解释它。

在我们这个例子里, expr1 是变量 stars,它的值是 0,因为 0 是假值,0 会被返回和渲染。看,这还不算太坏。

我会简单地这么写。

如果 expr1 是假值,返回 expr1 ,否则返回 expr2

所以,当对非布尔值使用 && 时,我们必须让这个假值返回 React 无法渲染的东西,比如说,false 这个值。

我们可以通过几种方式实现这一目标。让我们试试吧。

{!!stars && (  <div>    {'☆'.repeat(stars)}  </div>)}

注意 stars 前的双感叹操作符(!!)(呃,其实没有双感叹操作符。我们只是用了感叹操作符两次)。

***个感叹操作符会强迫 stars 的值变成布尔值并且进行一次“非”操作。如果 stars0 ,那么 !stars 会是 true

然后我们执行第二个操作,所以如果 stars0!!stars 会是 false。正好是我们想要的。

如果你不喜欢 !!,那么你也可以强制转换出一个布尔数比如这样(这种方式我觉得有点冗长)。

{Boolean(stars) && (

或者只是用比较符产生一个布尔值(有些人会说这样甚至更加语义化)。

{stars > 0 && (
关于字符串

空字符串与数字有一样的毛病。但是因为渲染后的空字符串是不可见的,所以这不是那种你很可能会去处理的难题,甚至可能不会注意到它。然而,如果你是***主义者并且不希望 DOM 上有空字符串,你应采取我们上面对数字采取的预防措施。

其它解决方案

一种可能的将来可扩展到其他变量的解决方案,是创建一个单独的 shouldRenderStars 变量。然后你用 && 处理布尔值。

const shouldRenderStars = stars > 0;
return (  <div>    {shouldRenderStars && (      <div>        {'☆'.repeat(stars)}      </div>    )}  </div>);

之后,在将来,如果业务规则要求你还需要已登录,拥有一条狗以及喝淡啤酒,你可以改变 shouldRenderStars 的得出方式,而返回的内容保持不变。你还可以把这个逻辑放在其它可测试的地方,并且保持渲染明晰。

const shouldRenderStars =   stars > 0 && loggedIn && pet === 'dog' && beerPref === 'light`;
return (  <div>    {shouldRenderStars && (      <div>        {'☆'.repeat(stars)}      </div>    )}  </div>);

“怎么在React条件渲染中使用三元表达式”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/79826.html

(0)

相关推荐

  • 有哪些MySQL源码系列问题

    技术有哪些MySQL源码系列问题本篇内容介绍了“有哪些MySQL源码系列问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成

    攻略 2021年10月28日
  • Linux下oracle11g在安装grid时密码框中不能输入任何信息怎么办

    技术Linux下oracle11g在安装grid时密码框中不能输入任何信息怎么办小编给大家分享一下Linux下oracle11g在安装grid时密码框中不能输入任何信息怎么办,相信大部分人都还不怎么了解,因此分享这篇文章

    攻略 2021年11月10日
  • 箱线图怎么画,SPSS中如何绘制箱图

    技术箱线图怎么画,SPSS中如何绘制箱图箱线图主要包含六个数据节点,将一组数据从大到小排列,分别计算出它的上边缘箱线图怎么画、上四分位数、 中位数、下四分位数、下边缘,还有一个异常值。工具/原料电脑:组装台式机系统:wi

    生活 2021年10月27日
  • 微信小程序修改checkbox的样式代码怎么写

    技术微信小程序修改checkbox的样式代码怎么写这篇文章将为大家详细讲解有关微信小程序修改checkbox的样式代码怎么写,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

    攻略 2021年11月16日
  • 莱布尼茨公式,牛顿莱布尼茨公式的故事

    技术莱布尼茨公式,牛顿莱布尼茨公式的故事牛顿和莱布尼茨间的故事莱布尼茨公式:1 、1665年夏天,因为英国爆发鼠疫,剑桥大学暂时关闭。刚刚获得学士学位、准备留校任教的
    牛顿被迫离校到他母亲的农场住了一年多。这一年多被称为

    生活 2021年10月22日
  • 怎么使用Python功能

    技术怎么使用Python功能这篇文章主要讲解了“怎么使用Python功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用Python功能”吧!变量赋值正如函数*ar

    攻略 2021年10月29日