React js 中的条件渲染

Conditional Rendering in React js

我在渲染中添加了条件,但突然停止显示。这是我正在使用的代码。

 {this.state.sdata.map((sdata, i) => 
   {i < 5 && 
    <ServiceNavItem key={i} onClick={()=>this.handleSelect(i)}{...sdata} /> 
   }
  )
 }

我只想显示 sdata 中的 4 个项目。任何人都请帮助。

您忘记了 return 来自 map 主体的元素,并且您需要 return null array 之后的所有条目我 >= 5.

这样写:

{this.state.sdata.map((sdata, i) => {
       if(i < 5) 
          return <ServiceNavItem key={i} onClick={()=>this.handleSelect(i)}{...sdata} /> 
       return null;
   })
}

但我建议您使用 for loop 而不是 map 来仅创建 5 个元素。

如果您想使用 map,那么首先使用 slice 并创建一个包含 5 个元素的子 array,然后在其上使用 map

像这样:

{this.state.sdata.slice(0,5).map((sdata, i) => {
     return <ServiceNavItem key={i} onClick={()=>this.handleSelect(i)}{...sdata} /> 
})}
{this.state.sdata.map((sdata, i) => 
     (i < 4 && 
       <ServiceNavItem key={i} onClick={()=>this.handleSelect(i)}{...sdata} /> 
     )
   )
}

只需将 {} 替换为 (),如上所示,要显示 4 个数据,您必须提供少于 4 个数据,因为我从 0 开始。

您还可以从此处尝试条件渲染的替代方案:Conditional Rendering in React and the JSX solution

基本上,建议是创建一个 "Conditional" 组件,并像这样使用它:

<Conditional if={this.state.something}>
  <div>hello!</div>
<Conditional>

因此,只有当 this.state.something 为真时,才会呈现 <div>hello!</div>

在你的例子中,应该这样实现:

{
  this.state.sdata.map((sdata, i) => 
    <Conditional if={i < 5}>
      <ServiceNavItem key={i} onClick={()=>this.handleSelect(i)}{...sdata} /> 
    </Conditional>
}

无论如何,只显示 5 个元素的最佳方法是: 基本上,只从数组中获取前 5 个元素并在 Array.

中执行 .map
{
  this.state.sdata.slice(0, 5).map((sdata, i) => 
    <ServiceNavItem key={i} onClick={()=>this.handleSelect(i)}{...sdata} /> 
  );
}