在React中实现条件渲染的5种方法及优缺点

开发 前端
随着现代Web应用的重量从后端转移到前端,我们不得不花更多的时间去考虑性能优化。在实现条件渲染时也是如此。

 随着现代Web应用的重量从后端转移到前端,我们不得不花更多的时间去考虑性能优化。在实现条件渲染时也是如此。

所以,试着花适量的时间来优化你的代码,同时尽可能多地推动重用组件。这将帮助你在质量和交付时间之间取得适当的平衡。

 

[[327628]]

 

1. if-else

我们可以将 if-else 条件逻辑应用于React中的JSX。请记住,JSX在执行之前已编译为JS,因此我们实际上是在用JS代码编写。

/ Example /

 

  1. var globalVar = true 
  2. function App() { 
  3.   if(globalVar) { 
  4.     return <div>If Rendering</div> 
  5.   } else { 
  6.     return <div>Else Rendering</div> 
  7.   } 

 

/ 性能 /

if-else 语句可能会导致React中的渲染浪费。这在中小型应用中可能感觉不到,但在有成百上千组件的大型应用中,性能拖累会相当明显。

让我们研究以下示例:

 

  1. render() { 
  2.   if(props.showA) { 
  3.     return ( 
  4.       <A /> 
  5.       <B /> 
  6.       <C /> 
  7.     ) 
  8.       } 
  9.   return ( 
  10.     <B /> 
  11.     <C /> 
  12.   ) 

根据条件加载组件A,B,C。

如果 showA prop为真,则渲染A,B,C。如果 showA prop 为假,则跳过A并仅渲染B和C。

这里的问题来自React的差异算法。这个算法是React用来知道何时避免浪费渲染的算法。

在初始 showA 为 true 时,组件将按照其结构A-> B-> C进行渲染。只要 showA 为 true 且其props不变,React就不会重新渲染。

但是,当 showA 变为 false 时,呈现结构将发生变化,结构将为B->C。现在,React会看到一个与之前的结构不同的结构,并且会重新渲染(un-mount 和 re-mount)B和C组件,即使它们的props/state保持不变,不需要重新渲染。这是一种浪费的重新渲染。

2.三元运算符

三元运算符是“if-else”条件的缩写。第一部分说明条件,第二部分则为返回值(如果为true),最后一部分为返回值(如果为false)。

 

  1. condition ? true_cond : false_cond 

/ Example /

 

  1. let cond = true 
  2. function App() { 
  3.   return ( 
  4.     {cond ?  
  5.      <div>If Rendering</div> 
  6.      : 
  7.      <div>Else Rendering</div> 
  8.     } 
  9.   ) 

 

3.Element变量

Element变量包含JSX元素,因此可以在React组件中的任何地方使用。Element变量使你的代码更易于阅读和理解,因为它消除了组件中的多个return语句。

实施此操作的标准方法:

 

  1. function App(props) { 
  2.   if(props.loggedIn) { 
  3.     return <div>Logged In</div> 
  4.   } else { 
  5.     return <div>Not Logged In</div> 
  6.   } 

 

在上面的组件中,我们有多个return语句。我们在JSX中使用 if-else 来有条件地呈现部分UI。

我们可以使用Element变量来存储要在条件语句的每个结果上返回的元素。

/ Example /

 

  1. function App(props) { 
  2.   let element 
  3.   if(props.loggedIn) { 
  4.     element = <div>Logged In</div> 
  5.   } else { 
  6.     element = <div>Not Logged In</div> 
  7.   } 
  8.   return element 

 

根据 if-else 语句的求值,我们使用 element变量 保存要渲染的最后一个元素。

通过使用Element变量,我们使我们的代码更简洁易读。

/ 性能 /

这里的问题与上面的 if-else 项中提到的问题相同。

4. AND运算符(&&)

AND运算符用于检查其左右表达式均正确。

 

  1. left_expr && right_expr 

如果表达式解析为true,则AND运算符将返回正确表达式的求值。

Example:

 

  1. (true && "nnamdi"
  2. // "nnamdi" 
  3. (true && 1234) 
  4. // 1234 

另一方面,如果表达式解析为false,则AND运算符将返回false:

 

  1. (false && "nnamdi"
  2. // false 
  3. (false && 1234) 
  4. // false 

如果是这种情况,我们可以使用此AND运算符在React中有条件地呈现JSX。

/ Example /

 

  1. function App(props) { 
  2.   return ( 
  3.     <div> 
  4.     { 
  5.       props.loggedIn &&  
  6.       <h3>You're logged in as {props.data.username}</h3> 
  7.     } 
  8.     </div> 
  9.   ) 

 

我们在JSX中使用AND运算符。花括号使我们能够在JSX中添加和评估JS表达式。

/ 性能 /

虽然它和前面两种条件渲染的方式在本质上没有什么区别,但带AND(&&)运算符的JSX表达式被认为是一个更好的选择,因为它在有条件地返回和渲染元素的同时,强制返回相同的结构。

5.返回null

我们可以将组件设置为返回 null 值而不是JSX表达式,以便对其进行评估,但不会渲染任何内容。

当组件返回null时,它将阻止React安装该组件。

 

  1. function App(props) { 
  2.   if(props.noRender) 
  3.     return null 
  4.  
  5.   return ( 
  6.     <div>App Component</div> 
  7.   ) 

 

如果设置了noRender属性,则此组件返回null。因此,如果我们不希望App组件渲染,则将设置noRender道具 。

请注意,无论如何,都会触发组件返回null的生命周期方法。

/ 性能 /

如上所述,尽管返回 null 的组件将不会渲染任何内容,但仍将对其进行评估。这意味着不必要的计算可能会在大型应用程序中加起来相当重要。

责任编辑:华轩 来源: 今日头条
相关推荐

2022-05-24 14:37:49

React条件渲染

2020-02-18 13:25:38

React前端数据

2023-12-05 15:58:06

React开发

2020-02-18 10:16:42

React数据代码

2020-05-28 13:33:30

React Hook前端开发

2010-08-31 14:49:57

CSS居中

2012-05-03 09:58:19

VLANVLAN划分

2020-01-16 10:47:36

服务器Kubernetes微服务

2019-01-03 15:43:25

Linux内存shell

2023-05-24 16:41:41

React前端

2020-05-13 09:01:23

Web隐藏技术元素

2021-03-21 22:23:38

云计算数据中心IT

2010-08-26 11:27:35

CSS居中

2019-11-15 13:26:17

编程语言微软C语言

2020-07-24 09:56:12

React开发数据

2021-03-11 14:23:17

云计算混合云工具

2023-08-15 15:44:55

React开发

2021-07-23 11:23:05

微软开源开发者

2019-10-22 10:48:48

Redis集群架构

2023-06-01 16:45:11

React开发JavaScript
点赞
收藏

51CTO技术栈公众号