🐛 修复视频播放器无限循环渲染问题
## 主要修复 - 修复 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>
This commit is contained in:
49
types/expo-video-migration.d.ts
vendored
Normal file
49
types/expo-video-migration.d.ts
vendored
Normal file
@@ -0,0 +1,49 @@
|
||||
// 迁移类型定义 - 兼容 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>;
|
||||
}
|
||||
Reference in New Issue
Block a user