You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React如何实现条件渲染?NFL每周赛程按需显示比赛日怎么实现

实现方案

核心逻辑

你只需要基于当前周次weekNo配置对应渲染规则,给各个比赛日板块加上条件判断即可实现需求。

第一步:预先配置周次规则

先把固定的赛程规则定义为可调整的常量,后续修改规则无需改动渲染逻辑:

// 可根据实际NFL赛程规则调整数值,周次索引从0开始
const SATURDAY_GAME_WEEK = 14; // 唯一有周六比赛的周索引,对应第15周
const FINAL_WEEK = 17; // 最后一周索引,对应第18周,仅安排周日比赛

第二步:修改渲染代码

给每个比赛日板块外层加条件判断,满足规则才渲染对应内容,同时额外增加数组非空判断,避免没有比赛时还渲染空的日期标题:

return (
<div>
      {/* 周四板块:非最后一周且当天有比赛才渲染 */}
      {weekNo !== FINAL_WEEK && Thursday.length > 0 && (
        <>
          <h2>Thursday</h2>
          {Thursday.map((teams) => (
            <p key={teams.id /* 补充唯一key避免React警告 */}>
              Week {weekNo + 1} at {teams.schedule[weekNo].time}: {teams.nickname} vs. {teams.schedule[weekNo].opponent}
            </p>
          ))}
        </>
      )}

      {/* 周六板块:仅指定周且当天有比赛才渲染 */}
      {weekNo === SATURDAY_GAME_WEEK && Saturday.length > 0 && (
        <>
          <h2>Saturday</h2>
          {Saturday.map((teams) => (
            <p key={teams.id}>
              Week {weekNo + 1} at {teams.schedule[weekNo].time}: {teams.nickname} vs. {teams.schedule[weekNo].opponent}
            </p>
          ))}
        </>
      )}

      {/* 周日板块:所有周只要有比赛就渲染 */}
      {Sunday.length > 0 && (
        <>
          <h2>Sunday</h2>
          {Sunday.map((teams) => (
            <p key={teams.id}>
              Week {weekNo + 1} at {teams.schedule[weekNo].time}: {teams.nickname} vs. {teams.schedule[weekNo].opponent}
            </p>
          ))}
        </>
      )}
      
      {/* 周一板块:非最后一周且当天有比赛才渲染 */}
      {weekNo !== FINAL_WEEK && Monday.length > 0 && (
        <>
          <h2>Monday</h2>
          {Monday.map((teams) => (
            <p key={teams.id}>
              Week {weekNo + 1} at {teams.schedule[weekNo].time}: {teams.nickname} vs. {teams.schedule[weekNo].opponent}
            </p>
          ))}
        </>
      )}
    </div>
);
};

可选优化

你现有代码里四个比赛日的列表渲染逻辑完全重复,可以抽成公共函数进一步精简代码:

// 抽离公共渲染函数
const renderGameList = (teamList, dayName) => {
  if (teamList.length === 0) return null;
  return (
    <>
      <h2>{dayName}</h2>
      {teamList.map(teams => (
        <p key={teams.id}>
          Week {weekNo + 1} at {teams.schedule[weekNo].time}: {teams.nickname} vs. {teams.schedule[weekNo].opponent}
        </p>
      ))}
    </>
  )
}

// 渲染部分直接调用即可
return (
  <div>
    {weekNo !== FINAL_WEEK && renderGameList(Thursday, 'Thursday')}
    {weekNo === SATURDAY_GAME_WEEK && renderGameList(Saturday, 'Saturday')}
    {renderGameList(Sunday, 'Sunday')}
    {weekNo !== FINAL_WEEK && renderGameList(Monday, 'Monday')}
  </div>
)

内容的提问来源于stack exchange,提问作者John G.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 15:39:02