Một điều chắc chắn ở đây là mấy ông đọc bài viết này của mình đều sẽ là dev và internet chắc chắn sẽ luôn luôn tốt. Hãy thử làm poor kid 30' hãy chuyển qua sử dụng 3g, mấy ông sẽ thấy tốc độ load ảnh một cách rõ rệt hơn.
Progressive component
Ở component này đáng lẽ mình sẽ sử dụng 1 spread syntax props để tránh phải viết nhiều và xác định những props được gửi qua, nhưng project hiện tại đang có typescript nên mình sẽ làm theo đúng chuẩn vậy
Vẫn chưa thấy gì đặc biệt đúng không =)), chúng ta qua phần xử lý Animation quan trọng nhất nhé.
Animated
//khởi tao Animated cho thumnail và image large
thumbnailAnimated = new Animated.Value(0);
imageAnimated = new Animated.Value(0);
//Khi tải hình nhỏ, ta sẽ đặt hình nhỏ thành 1
//Khi tải hình ảnh đầy đủ, sẽ đặt imageAnimated thành 1
//2 function phía dưới sẽ được gọi trong onLoad()
const handleThumbnailLoad = () => {
Animated.timing(thumbnailAnimated, {
toValue: 1,
useNativeDriver: true,
}).start();
};
const onImageLoad = () => {
Animated.timing(imageAnimated, {
toValue: 1,
useNativeDriver: true,
}).start();
};
return (
<View style={styles.container}>
<Animated.Image
source={thumbnailSource}
style={[style, {opacity: thumbnailAnimated}]}
resizeMode={resizeMode}
onLoad={handleThumbnailLoad}
blurRadius={1}
/>
<Animated.Image
source={source}
style={[styles.imageOverlay, {opacity: imageAnimated}, style]}
resizeMode={resizeMode}
onLoad={onImageLoad}
/>
</View>
);