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

React 18模板中return语句失效无法渲染元素的原因是什么?

问题原因及修复方案

核心原因

你在JSX的{}里直接写了return语句,这是错误的——JSX中{}只能放表达式(能返回值的代码),不能放完整的语句(比如return、if这类)。所以浏览器会把return trailers.slice...当成普通字符串直接渲染,而不是执行这段逻辑生成<li>元素。

需要修正的几个点

1. 移除多余的return

在<ol>和<div className="carousel-inner">内部,直接写map表达式即可,不用加return:

// 错误写法
return trailers.slice(0, maxCarouselItems).map(...)

// 正确写法
trailers.slice(0, maxCarouselItems).map(...)

2. 修正JSX属性的语法错误

  • key="video.id":这会把key设为字符串"video.id",应该用{video.id}绑定变量,保证每个元素key唯一
  • data-bs-slide-to="${index}":模板字符串要放在{}里,直接写data-bs-slide-to={index}就行(React会自动把数字转成字符串)
  • className="{ active: index === 0 }":这会把类名设为字符串"{ active: index === 0 }",应该用三元表达式动态生成类名:className={index === 0 ? "active" : ""}
  • activeclassname:没有这个属性,应该合并到className里,写成className={carousel-item ${index === 0 ? "active" : ""}}
  • maxCarouselItems未定义:要先声明这个变量,比如const maxCarouselItems = 5;

修正后的完整Trailercarousel.jsx代码

import './Trailercarousel.css';

function Trailercarousel({ trailers }) {
  const maxCarouselItems = 5; // 定义最大轮播项数量
  return (
    <div id="trailersCarousel" className="carousel slide" data-bs-interval="false">
      {trailers.length > 1 ?
        <>
          <ol className="carousel-indicators">
            {trailers.slice(0, maxCarouselItems).map((video, index) => (
              <li
                key={video.id}
                data-bs-target="#trailersCarousel"
                data-bs-slide-to={index}
                className={index === 0 ? "active" : ""}
              >
                {index + 1}
              </li>
            ))}
          </ol>
        </> : <>
      </>
      }

      <div className="carousel-inner">
        {trailers.slice(0, 5).map((video, index) => (
          <div
            key={video.id}
            className={`carousel-item ${index === 0 ? "active" : ""}`}
          >
            <iframe
              className="embed-responsive-item"
              src={`https://www.youtube.com/embed/${video.key}`}
              title={video.name} // 增加title属性,提升可访问性
            ></iframe>
          </div>
        ))}
      </div>
    </div>
  );
}

export default Trailercarousel;

内容的提问来源于stack exchange,提问作者Razvan Zamfir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 22:23:12