Files
bw-expo-app/types/expo-video-migration.d.ts
imeepos eee280d9b3 🐛 修复视频播放器无限循环渲染问题
## 主要修复
- 修复 FullscreenMediaModal 和 FullscreenVideoModal 中的 useEffect 循环依赖
- 重构 VideoPlayer 组件的视频属性管理逻辑
- 优化 useVideoPlayer 的初始化回调机制

## 新增功能
- 新增标签 API 支持 (lib/api/tags.ts)
- 新增内容骨架屏组件 (components/profile/content-skeleton.tsx)
- 新增返回按钮组件 (components/ui/back-button.tsx)

## 改进优化
- 优化视频播放器的性能,避免重复初始化
- 修复 useEffect 依赖项导致的无限循环更新
- 完善类型定义和 API 接口

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-10 11:58:56 +08:00

50 lines
1.1 KiB
TypeScript

// 迁移类型定义 - 兼容 expo-av 到 expo-video 的迁移
import { Video } from 'expo-video';
export type { Video };
// ResizeMode 映射
export const ResizeMode = {
CONTAIN: 'contain' as const,
COVER: 'cover' as const,
STRETCH: 'stretch' as const,
};
export type ResizeMode = 'contain' | 'cover' | 'stretch';
// 兼容性类型
export interface AVPlaybackStatus {
isLoaded: boolean;
isPlaying?: boolean;
durationMillis?: number;
naturalSize?: {
width: number;
height: number;
};
positionMillis?: number;
}
export interface VideoReadyForDisplayEvent {
nativeEvent: {
naturalSize: {
width: number;
height: number;
};
};
}
// Video 组件的兼容性 props
export interface VideoProps {
source: { uri: string };
style?: any;
resizeMode?: ResizeMode;
shouldPlay?: boolean;
isLooping?: boolean;
isMuted?: boolean;
useNativeControls?: boolean;
onReadyForDisplay?: (event: VideoReadyForDisplayEvent) => void;
onError?: (error: any) => void;
onPlaybackStatusUpdate?: (status: AVPlaybackStatus) => void;
ref?: React.RefObject<Video>;
}