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

Kotlin/JS引入react-youtube依赖报错,求解决方案

解决Kotlin/JS React中react-youtube组件导入报错问题

问题描述

将已弃用的react-youtube-lite替换为react-youtube后,浏览器控制台出现报错:

Warning: React.createElement: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.

已更新build.gradle.kts依赖:

dependencies {
...
    //Video Player (chapter 7)
    implementation(npm("react-youtube-lite", "1.5.0"))
    implementation(npm("react-youtube", "9.0.3"))
...
}

执行browserRun后yarn.lock已更新,react-youtube存在其中。原组件代码如下:

@file:JsModule("react-youtube")
@file:JsNonModule

import react.*

@JsName("ReactYoutube")
external val ReactYoutube: ComponentClass<ReactYoutubeProps>

external interface ReactYoutubeProps : Props {
    var videoId: String?
    var opts: Any
}

解决方案

报错核心原因是错误指定了组件的导出名称:react-youtube的播放器组件是默认导出,而非名为ReactYoutube的命名导出。修改组件代码如下:

@file:JsModule("react-youtube")
@file:JsNonModule

import react.*

// 匹配react-youtube的默认导出
@JsName("default")
external val YouTube: ComponentClass<YouTubeProps>

external interface YouTubeProps : Props {
    var videoId: String?
    // 使用dynamic适配JS配置对象的灵活结构
    var opts: dynamic
}

关键说明

  • react-youtube在JS中的标准导入方式为import YouTube from 'react-youtube',对应Kotlin/JS中需用@JsName("default")获取默认导出;
  • 将opts类型从Any改为dynamic,能更好支持YouTube播放器配置对象的属性访问和类型推断;
  • 若不再需要旧库react-youtube-lite,建议从build.gradle.kts中移除该依赖,避免冗余。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 14:03:26