当前位置: 首页 > news >正文

河南省住房和城乡建设厅二维码网站百度实名认证

河南省住房和城乡建设厅二维码网站,百度实名认证,opencart做外贸网站怎样,wordpress 导航栏登录组件经常需要根据不同条件显示不同内容。在React中,你可以使用类似于if语句、&&和?:运算符的JavaScript语法有条件地呈现JSX。你将学到:如何根据条件返回不同的JSX如何有条件地包含或排除一段JSX在React代码库中常见的条件语法快捷方式有条件地…

组件经常需要根据不同条件显示不同内容。在React中,你可以使用类似于if语句、&&和?:运算符的JavaScript语法有条件地呈现JSX。

你将学到:

  • 如何根据条件返回不同的JSX

  • 如何有条件地包含或排除一段JSX

  • 在React代码库中常见的条件语法快捷方式

有条件地返回JSX

假设你有一个PackingList组件,渲染多个项目,这些项目可以标记为已打包或未打包:

function Item({ name, isPacked }) {return <li className="item">{name}</li>;
}export default function PackingList() {return (<section><h1>Sally Ride's Packing List</h1><ul><Item isPacked={true} name="Space suit" /><Item isPacked={true} name="Helmet with a golden leaf" /><Item isPacked={false} name="Photo of Tam" /></ul></section>);
}

注意到一些Item组件的isPacked属性被设置为true,而不是false。如果isPacked={true},你想在已打包的项目中添加一个勾号(✔)。

你可以使用if/else语句编写如下:

if (isPacked) {return <li className="item">{name} ✔</li>;
}
return <li className="item">{name}</li>;

如果isPacked属性为true,则该代码返回一个不同的JSX树。通过这个更改,一些项目在末尾会显示一个勾号:

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>Sally Ride's Packing List</h1><ul><Item isPacked={true} name="Space suit" /><Item isPacked={true} name="Helmet with a golden leaf" /><Item isPacked={false} name="Photo of Tam" /></ul></section>);
}

尝试编辑返回值,观察结果的变化!

注意到你正在使用JavaScript的if和return语句来创建分支逻辑。在React中,控制流(如条件)是由JavaScript处理的。

使用null有条件地返回什么也不渲染

在某些情况下,你可能不想渲染任何东西。例如,假设你根本不想显示已打包的项目。一个组件必须返回一些内容。在这种情况下,你可以返回null:

if (isPacked) {return null;
}
return <li className="item">{name}</li>;

如果isPacked为true,该组件将返回空值null,否则,它将返回用于渲染的JSX。

function Item({ name, isPacked }) {if (isPacked) {return null;}return <li className="item">{name}</li>;
}export default function PackingList() {return (<section><h1>Sally Ride's Packing List</h1><ul><Item isPacked={true} name="Space suit" /><Item isPacked={true} name="Helmet with a golden leaf" /><Item isPacked={false} name="Photo of Tam" /></ul></section>);
}

实际上,在组件中返回null并不常见,因为它可能会让尝试渲染它的开发人员感到惊讶。通常,你会有条件地在父组件的JSX中包含或排除该组件。以下是如何实现这一点!

有条件地包含JSX

在前面的示例中,你控制了组件将返回哪个(如果有的话!)JSX树。你可能已经注意到了渲染输出中的一些重复:

<li className="item">{name} ✔</li>

和下面这段代码非常相似:

<li className="item">{name}</li>

两个条件分支都返回<li className="item">...</li>

if (isPacked) {return <li className="item">{name} ✔</li>;
}
return <li className="item">{name}</li>;

虽然这种重复没有害处,但它可能会使你的代码更难维护。如果你想要改变className会怎么样呢?你必须在代码中的两个地方进行更改!在这种情况下,你可以有条件地包含一些JSX,使你的代码更加DRY。

条件(三目)运算符(? :)

JavaScript有一种紧凑的语法来编写条件表达式 - 条件运算符或“三目运算符”。

你可以用它来代替:

if (isPacked) {return <li className="item">{name} ✔</li>;
}
return <li className="item">{name}</li>;

可以写成这样:

return (<li className="item">{isPacked ? name + ' ✔' : name}</li>
);

可以将其理解为“如果isPacked为true,则(?)呈现name+'✔',否则(:)呈现name”。

现在假设你想要将完成的条目文本包装在另一个HTML标记中,例如<del>来划掉它。你可以添加更多的换行符和括号,这样就可以更容易地嵌套更多的JSX在每个情况下:

function Item({ name, isPacked }) {return (<li className="item">{isPacked ? (<del>{name + ' ✔'}</del>) : (name)}</li>);
}export default function PackingList() {return (<section><h1>Sally Ride's Packing List</h1><ul><Item isPacked={true} name="Space suit" /><Item isPacked={true} name="Helmet with a golden leaf" /><Item isPacked={false} name="Photo of Tam" /></ul></section>);
}

这种方式适用于简单的条件,但是要适度使用。如果你的组件具有太多嵌套的条件标记而变得混乱,请考虑提取子组件以清理代码。在React中,标记是代码的一部分,因此您可以使用变量和函数等工具来整理复杂的表达式。

逻辑与(&&)运算符

你会遇到的另一个常用的快捷方式是JavaScript的逻辑与(&&)运算符。在React组件中,当您希望在条件为真时呈现一些JSX,否则不呈现任何东西时,它经常出现。使用&&,您可以仅在isPacked为true时有条件地呈现复选标记:

return (<li className="item">{name} {isPacked && '✔'}</li>
);

你可以理解为“如果isPacked为真,则(&&)渲染勾号,否则不渲染任何东西”。

下面是它的实现:

function Item({ name, isPacked }) {return (<li className="item">{name} {isPacked && '✔'}</li>);
}export default function PackingList() {return (<section><h1>Sally Ride's Packing List</h1><ul><Item isPacked={true} name="Space suit" /><Item isPacked={true} name="Helmet with a golden leaf" /><Item isPacked={false} name="Photo of Tam" /></ul></section>);
}

当 JavaScript 的 && 表达式左侧(我们的条件)为 true 时,它返回右侧的值(在我们的示例中,是打勾符号)。但如果条件为 false,整个表达式将变为 false。React 将 false 视为 JSX 树中的“空洞”,就像 null 或 undefined 一样,并在其位置上不呈现任何内容。

💡 陷阱:不要将数字放在 && 的左侧。

为了测试条件,JavaScript 会自动将左侧转换为布尔值。但是,如果左侧是 0,则整个表达式得到的值就是 0,而 React 将愉快地呈现 0 而不是什么都不呈现。

例如,常见的错误是编写类似 messageCount && <p>New messages</p> 的代码。很容易假设当 messageCount 为 0 时,它什么也不呈现,但它实际上会呈现 0 本身!

要修复它,请将左侧设置为布尔值:messageCount > 0 && <p>New messages</p>

有条件地将 JSX 赋给变量

当快捷方式妨碍编写普通代码时,请尝试使用 if 语句和变量。您可以使用 let 定义的变量进行重新赋值,因此首先提供您要显示的默认内容,即名称:

let itemContent = name;

使用 if 语句将 JSX 表达式重新分配给 itemContent(如果 isPacked 为 true):

if (isPacked) {itemContent = name + " ✔";
}

花括号打开了“JavaScript 的窗口”。使用花括号嵌套先前计算出的表达式,将变量嵌入返回的 JSX 树中:

<li className="item">{itemContent}
</li>

这种风格最冗长,但也是最灵活的。以下是实例:

function Item({ name, isPacked }) {let itemContent = name;if (isPacked) {itemContent = name + " ✔";}return (<li className="item">{itemContent}</li>);
}export default function PackingList() {return (<section><h1>Sally Ride's Packing List</h1><ul><Item isPacked={true} name="Space suit" /><Item isPacked={true} name="Helmet with a golden leaf" /><Item isPacked={false} name="Photo of Tam" /></ul></section>);
}

与之前一样,这不仅适用于文本,还适用于任意的 JSX。

function Item({ name, isPacked }) {let itemContent = name;if (isPacked) {itemContent = (<del>{name + " ✔"}</del>);}return (<li className="item">{itemContent}</li>);
}export default function PackingList() {return (<section><h1>Sally Ride's Packing List</h1><ul><Item isPacked={true} name="Space suit" /><Item isPacked={true} name="Helmet with a golden leaf" /><Item isPacked={false} name="Photo of Tam" /></ul></section>);
}

如果您不熟悉 JavaScript,这些样式的多样性可能会一开始让您感到不知所措。然而,学习它们将有助于您阅读和编写任何 JavaScript 代码,而不仅仅是 React 组件!首先选择您喜欢的风格,如果您忘记了其他风格的工作方式,请再次参考此参考文献。

总结

  • 在 React 中,您可以使用 JavaScript 控制分支逻辑。

  • 你可以使用 if 语句有条件地返回 JSX 表达式。

  • 你可以使用花括号将一些 JSX 有条件地保存到变量中,然后在 JSX 中包含它。

  • 在 JSX 中,{cond ? <A /> : <B />} 表示“如果 cond,则呈现 <A />,否则呈现 <B />”。

  • 在 JSX 中,{cond && <A />} 表示“如果 cond,则呈现 <A />,否则不呈现任何内容”。

  • 快捷方式很常见,但如果您喜欢普通 if,则不必使用它们。

c3c03f116afb7b578b9ad39a47b71b33.png

长按关注

帮助 10W 人入门并进阶前端

http://www.yidumall.com/news/80457.html

相关文章:

  • 我想自己做网站优化服务是什么意思
  • 个人网站的设计及实现找关键词的三种方法
  • 塘沽做网站比较好的搜seo
  • 合肥市建设工程合同备案网站关键词排名优化公司地址
  • 网站开发人员保密地推团队联系方式
  • 美工怎么做网站效果图淘宝推广引流方法有哪些
  • 建筑模板工厂价格尺寸福建seo排名
  • 做赌博网站条件世界杯最新排名
  • 现在网站用什么软件做朋友圈网络营销
  • 有做国际网站生意吗网站收录情况
  • 最新的网站建设软件青岛官网优化
  • 做炒作的网站如何制作个人网站
  • 网站策划与建设阶段的推广的目标申请网站怎样申请
  • 建设内容管理网站的目的浏览广告赚钱的平台
  • 公司网站建设的百度应用市场app下载安装
  • 查房价的官方网站百度代理服务器
  • 蓝色风格企业网站模板蚌埠网络推广
  • 凤凰网站建设公司制作网页代码大全
  • 西安高端网站建设信息互联网推广
  • 厦门律师网站建设企业培训课程表
  • 功能网站建设网络营销方案
  • 网站建设教程 mysql优化公司结构
  • 苏州网站建设姜超代运营电商公司排行榜
  • 电子商务网站建设的毕业论文淘宝关键词搜索量排名
  • 景区网站建设公司手机自己怎么建电影网站
  • 网站建设设计服务公司服务营销的七个要素
  • 防城港网站建设百度推广优化师
  • 国际网站建设与维护域名批量查询系统
  • 怎么在云主机上做网站最新国际新闻事件
  • 个人能否做网站seo网上培训课程