Image компонент
Зураг харуулах нь апп хөгжүүлэлтэд байнга тохиолддог. React Native-н Image component нь локал зураг болон сүлжээний зургийг хоёуланг нь дэмждэг. Зургийн хэмжээ тааруулах, ачаалах горим — энэ бүгдийг энэ хичээлд сурна.
Локал зураг харуулах
Проектийн assets хавтас дотрох зургийг require() ашиглан оруулна:
import { View, Image, StyleSheet } from "react-native";
export default function App() {
return (
<View style={styles.container}>
<Image source={require("./assets/images/logo.png")} style={styles.logo} />
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: "center",
alignItems: "center",
backgroundColor: "#0b1120",
},
logo: {
width: 120,
height: 120,
borderRadius: 16,
},
});
Локал зургийн хувьд width ба height-г заавал тодорхойлох шаардлагатай — тодорхойлоогүй бол зураг харагдахгүй.
Сүлжээний зураг (remote image)
URL-аас зураг ачаалахад source prop-д { uri: '...' } объект дамжуулна:
import { View, Image, Text, StyleSheet } from "react-native";
export default function UserAvatar() {
return (
<View style={styles.container}>
<Image
source={{
uri: "https://avatars.githubusercontent.com/u/12345678",
}}
style={styles.avatar}
/>
<Text style={styles.name}>Болд Баатар</Text>
<Text style={styles.role}>React Native хөгжүүлэгч</Text>
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: "center",
alignItems: "center",
backgroundColor: "#0b1120",
gap: 8,
},
avatar: {
width: 80,
height: 80,
borderRadius: 40,
borderWidth: 2,
borderColor: "#22d3ee",
},
name: { fontSize: 18, fontWeight: "bold", color: "#f1f5f9" },
role: { fontSize: 14, color: "#94a3b8" },
});
resizeMode — зургийг яаж байршуулах вэ?
resizeMode prop нь зураг хайрцагтаа яаж багтахыг тодорхойлно:
{
/* cover — хайрцагийг бүрэн дүүргэнэ, хажуу нь таслагдаж болно */
}
<Image source={{ uri: imageUrl }} style={styles.img} resizeMode="cover" />;
{
/* contain — бүтэн зургийг харуулна, цагаан зай үлдэж болно */
}
<Image source={{ uri: imageUrl }} style={styles.img} resizeMode="contain" />;
{
/* stretch — хайрцагт яг сунгана, дүрс гажиж болно */
}
<Image source={{ uri: imageUrl }} style={styles.img} resizeMode="stretch" />;
| resizeMode | Тайлбар | Хэрэглэх үе |
| ---------- | ---------------------------------- | ----------------------- |
| cover | Хайрцагийг дүүргэнэ, таслагдана | Ар дэвсгэр, ковер зураг |
| contain | Бүтэн харагдана, зай үлдэнэ | Лого, дүрс тэмдэг |
| stretch | Хайрцагт яг сунгана | Ховор тохиолдол |
| center | Голдоо байна, хэмжээ өөрчлөгдөхгүй | Жижиг зураг |
Ачаалж байх үед placeholder харуулах
Сүлжээний зураг ачаалагдах хугацаанд хоосон харагдвал муугийн мэт санагддаг. onLoadEnd ашиглан placeholder нэмнэ:
import { View, Image, ActivityIndicator, StyleSheet } from "react-native";
import { useState } from "react";
export default function SmartImage({ uri }) {
const [loaded, setLoaded] = useState(false);
return (
<View style={styles.wrapper}>
{!loaded && (
<View style={styles.placeholder}>
<ActivityIndicator color="#22d3ee" />
</View>
)}
<Image
source={{ uri }}
style={[styles.image, !loaded && { opacity: 0 }]}
resizeMode="cover"
onLoadEnd={() => setLoaded(true)}
/>
</View>
);
}
const styles = StyleSheet.create({
wrapper: {
width: "100%",
height: 200,
borderRadius: 12,
overflow: "hidden",
backgroundColor: "#1e293b",
},
placeholder: {
...StyleSheet.absoluteFillObject,
justifyContent: "center",
alignItems: "center",
},
image: {
width: "100%",
height: "100%",
},
});
StyleSheet.absoluteFillObject нь { position: 'absolute', top: 0, left: 0, right: 0, bottom: 0 } -тэй тэнцүү — эцэг элементийн бүх талыг дүүргэдэг товчлол.
Дараагийн хичээлд:
Image component-ийг сурлаа. Дараагийн хичээлд Expo Icons — аппд мянга гаруй бэлэн дүрс тэмдэг нэмэх. Товч, navigation, жагсаалт — иконтой болбол апп нь мэргэжлийн харагдах болно.