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

如何将本地视频文件作为props传递给ReactPlayer组件

ReactPlayer无法加载本地视频URL的问题

问题场景

使用ReactPlayer组件时,title、desc、sourceUrl等props都能正常渲染,但传入的videoUrl无法让视频正常加载。直接在组件中导入视频文件却能正常运行。

错误原因

问题出在文件1的Data数组定义中,你将videoUrl的值包裹在了对象{ videoSample }里,这会导致props.videoUrl最终是一个对象(结构为{ videoSample: 视频资源引用 }),而ReactPlayer的url属性需要的是直接的视频资源引用或路径字符串,无法识别对象类型的值。

解决方案

1. 修改文件1的Data结构

去掉videoUrl值外层的对象包裹,直接赋值为videoSample:

import videoSample from "../assets/videos/sample-video.mov";

export const Data = {
  ProjectList: [
    {
      title: "My title",
      desc: "Some description",
      videoUrl: videoSample, // 移除外层{}
      sourceUrl: "https:// ... ",
    },
  ],
};

2. 保持ProjectDetail组件不变

此时props.videoUrl会直接拿到正确的视频资源引用,ReactPlayer就能正常加载视频了:

export default function ProjectDetail(props) {
  return (
    <>
      <div>
        <ReactPlayer 
           url={props.videoUrl}  // 现在可正常工作
           width="500px"
        />
      </div>
      <div>
        <h2>{props.title}</h2>
        <p>{props.desc}</p>
        <button 
          onClick={() => { window.open(props.sourceUrl, "_blank"); }}
        > Click to see more
        </button>
      </div>
    </>
  );
}

补充说明

当你使用{ videoSample }的语法时,这是ES6的对象简写,等同于{ videoSample: videoSample },传递给组件的是一个包含视频资源的对象,而非资源本身。直接传递videoSample则和你在组件中直接导入的效果一致,ReactPlayer可以正确识别这个资源引用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 07:16:28