我如何在 React 中有条件地显示?

How do I conditionally display in React?

我正在开发一个显示 NFL 每周赛程的应用程序。下面的代码有效,但我如何有条件地渲染天数?例如,只有一周有星期六的比赛。另外,上周只有周日比赛。

return (
<div>
      <h2>Thursday</h2>
      {Thursday.map((teams) => (
        <p>
          Week {weekNo + 1} at {teams.schedule[weekNo].time}: {teams.nickname}{" "}
          vs.
          {teams.schedule[weekNo].opponent}{" "}
        </p>
      ))}

      <h2>Saturday</h2>
      {Saturday.map((teams) => (
        <p>
          Week {weekNo + 1} at {teams.schedule[weekNo].time}: {teams.nickname}{" "}
          vs.
          {teams.schedule[weekNo].opponent}{" "}
        </p>
      ))}

      <h2>Sunday</h2>
      {Sunday.map((teams) => (
        <p>
          Week {weekNo + 1} at {teams.schedule[weekNo].time}: {teams.nickname}{" "}
          vs.
          {teams.schedule[weekNo].opponent}{" "}
        </p>
      ))}
      
      <h2>Monday</h2>
      {Monday.map((teams) => (
        <p>
          Week {weekNo + 1} at {teams.schedule[weekNo].time}: {teams.nickname}{" "}
          vs.
          {teams.schedule[weekNo].opponent}{" "}
        </p>
      ))}
    </div>
);
};
<h2>Thursday</h2>
      {Thursday.map((teams) => (
        <p>
          Week {weekNo + 1} at {teams.schedule[weekNo].time}: {teams.nickname}{" "}
          vs.
          {teams.schedule[weekNo].opponent}{" "}
        </p>
      ))}

将其提取到渲染函数中,return null 不需要时:

renderThursday = () => {
  if (!Thursday.length) return null

  return (
    <>
      <h2>Thursday</h2>
      {Thursday.map((teams) => (
        <p>
          Week {weekNo + 1} at {teams.schedule[weekNo].time}: {teams.nickname}{" "}
          vs.
          {teams.schedule[weekNo].opponent}{" "}
        </p>
      ))}
    </>
  )
}

然后将它们堆叠在您的主return:

return (
  <div>
    {this.renderThursday()}
    {this.renderSaturday()}
    {this.renderSunday()}
    {this.renderMonday()}
  </div>
)

在你的情况下,我会创建一个功能组件来防止代码重复(如果没有要显示的时间表,该组件将 return 为 null,因此该组件将不会呈现任何内容)

function DaySchedule({day, teams, weekNo}) {
  if (!teams.length) {
    return null;
  }

  return (
    <>
      <h2>{day}</h2>
      {teams.map(team => (
        <p>
          {`
            Week ${weekNo + 1} at ${team.schedule[weekNo].time}: 
            ${team.nickname} vs. {team.schedule[weekNo].opponent}
          `}
        </p>
      ))}
    </>
  );
}

然后你就可以像这样使用这个组件了:

return (
  <div>
    <DaySchedule day="Thursday" teams={Thursday} weekNo={weekNo}/>
    <DaySchedule day="Saturday" teams={Saturday} weekNo={weekNo}/>
    <DaySchedule day="Sunday" teams={Sunday} weekNo={weekNo}/>
    <DaySchedule day="Monday" teams={Monday} weekNo={weekNo}/>
  </div>
);