@u-wave/react-vimeo组件onProgress回调无法触发求助
解决@u-wave/react-vimeo onProgress回调不触发的问题
针对你遇到的视频可正常播放但onProgress回调未触发的情况,可尝试以下几种解决方案:
1. 动态导入组件(适配Next.js SSR/SSG环境)
Next.js默认的服务端渲染可能导致Vimeo Player脚本未正确加载,进而无法绑定回调。通过动态导入并禁用SSR解决:
import dynamic from 'next/dynamic'; // 动态导入Vimeo组件,禁用SSR const Vimeo = dynamic(() => import('@u-wave/react-vimeo'), { ssr: false, }); const handleVimeoProgress = (data: any) => { console.log('Progress:', data.percent); }; export default function YourComponent() { return ( <Vimeo video="你的视频ID" width="850" height="400" onProgress={handleVimeoProgress} autoplay /> ); }
2. 手动通过ref绑定Progress事件
如果组件默认的props回调仍不生效,可通过ref获取Player实例,手动监听事件:
import { useRef, useEffect } from 'react'; import Vimeo from '@u-wave/react-vimeo'; const handleVimeoProgress = (data: any) => { console.log('Progress:', data.percent); }; export default function YourComponent() { const playerRef = useRef<any>(null); useEffect(() => { const playerInstance = playerRef.current?.player; if (playerInstance) { // 绑定progress事件 playerInstance.on('progress', handleVimeoProgress); // 组件卸载时移除监听 return () => { playerInstance.off('progress', handleVimeoProgress); }; } }, []); return ( <Vimeo ref={playerRef} video="你的视频ID" width="850" height="400" autoplay /> ); }
3. 检查视频权限配置
确保你的Vimeo视频满足以下条件:
- 视频的嵌入权限已开启,允许在你的域名下嵌入
- 视频未开启严格的DRM或隐私限制(部分受保护视频会限制Player API事件触发)
4. 升级组件版本
当前使用的@u-wave/react-vimeo@0.9.10版本较旧,存在部分与现代React/Next.js版本兼容的问题。尝试升级到最新稳定版:
npm update @u-wave/react-vimeo # 或 yarn upgrade @u-wave/react-vimeo
内容的提问来源于stack exchange,提问作者briba
相关产品推荐
相关产品推荐

