Visa bilder från lokala och externa källor
Läs in bilder från assets-mappen och från externa URL:er med Image-komponenten, ange resizeMode och visa platshållare under inläsningen.
Visa bilder från lokala och externa källor är en gratis lektion i React Native Academy på CoddyKit. Detta är lektion 3 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för React Native Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i React Native Academy innehåller totalt 4 lektioner.
Introduktion till Image-komponenten
Komponenten Image visar foton, ikoner och grafik. Kom bara ihåg att ange en bredd och höjd – utan storlek renderas den som en osynlig tom ruta.
import { Image, View, StyleSheet } from 'react-native';
export default function SimpleImage() {
return (
<View style={{ padding: 16 }}>
<Image
source={{ uri: 'https://picsum.photos/200/200' }}
style={styles.image}
/>
</View>
);
}
const styles = StyleSheet.create({
image: {
width: 200,
height: 200,
},
});Läsa in lokala bilder med require()
Visa en bild från dina assets med require() och en fast sökväg. Den paketeras i appen när den byggs, så den läses in direkt och fungerar offline.
import { Image, StyleSheet } from 'react-native';
export default function LocalImage() {
return (
<Image
source={require('./assets/icon.png')}
style={styles.logo}
/>
);
}
const styles = StyleSheet.create({
logo: {
width: 100,
height: 100,
},
});
// You can also provide @2x and @3x variants:
// assets/icon.png
// assets/icon@2x.png ← used on 2× screens
// assets/icon@3x.png ← used on 3× screensLäsa in externa bilder från URL:er
För en bild online skickar du ett uri-objekt till source. React Native hämtar och cachar bilden, men du måste fortfarande ange en storlek eftersom måtten ännu inte är kända.
import { Image, StyleSheet } from 'react-native';
export default function RemoteImage() {
const imageUri = 'https://picsum.photos/seed/react-native/300/200';
return (
<Image
source={{ uri: imageUri }}
style={styles.photo}
/>
);
}
const styles = StyleSheet.create({
photo: {
width: '100%', // fill container width
height: 200, // fixed height
borderRadius: 12,
},
});resizeMode: anpassa bilder i behållare
Prop-en resizeMode anpassar en bild till dess ruta: "cover" fyller rutan och beskär bilden, medan "contain" visar hela bilden. Använd cover för foton och contain för logotyper.
import { Image, View, Text, StyleSheet } from 'react-native';
export default function ResizeModes() {
const uri = 'https://picsum.photos/400/300';
const box = { width: 150, height: 100, borderWidth: 1, borderColor: '#ccc' };
return (
<View style={{ flexDirection: 'row', gap: 8, padding: 16 }}>
<View>
<Image source={{ uri }} style={[box, { resizeMode: 'cover' }]} />
<Text>cover</Text>
</View>
<View>
<Image source={{ uri }} style={[box, { resizeMode: 'contain' }]} />
<Text>contain</Text>
</View>
</View>
);
}Laddningsplatshållare och defaultSource
Det tar en stund att läsa in bilder online, så visa en placeholder medan du väntar. Följ ett laddningstillstånd och byt till en laddningsindikator tills bilden har lästs in.
import { Image, View, ActivityIndicator, StyleSheet } from 'react-native';
import { useState } from 'react';
export default function ImageWithLoader() {
const [loading, setLoading] = useState(true);
return (
<View style={styles.container}>
{loading && (
<ActivityIndicator
style={StyleSheet.absoluteFill}
size='large'
color='#999'
/>
)}
<Image
source={{ uri: 'https://picsum.photos/300/200' }}
style={styles.image}
onLoad={() => setLoading(false)}
/>
</View>
);
}
const styles = StyleSheet.create({
container: { width: 300, height: 200, backgroundColor: '#f0f0f0', borderRadius: 12 },
image: { width: 300, height: 200, borderRadius: 12 },
});onLoad, onError och onLoadStart
Image ger dig callbacks: onLoadStart, onLoad och onError. Använd onError för att visa en reservbild när en URL är felaktig eller nätverket försvinner.
import { Image, Text, View, StyleSheet } from 'react-native';
import { useState } from 'react';
export default function RobustImage({ uri, fallback }) {
const [failed, setFailed] = useState(false);
if (failed) {
return (
<View style={styles.fallback}>
<Text style={{ color: '#999' }}>Image unavailable</Text>
</View>
);
}
return (
<Image
source={{ uri: failed ? null : uri }}
defaultSource={fallback}
style={styles.img}
onError={(e) => {
console.warn('Image failed:', e.nativeEvent.error);
setFailed(true);
}}
/>
);
}
const styles = StyleSheet.create({
img: { width: 200, height: 200, borderRadius: 8 },
fallback: { width: 200, height: 200, backgroundColor: '#eee', alignItems: 'center', justifyContent: 'center', borderRadius: 8 },
});expo-image för bättre prestanda
För många bilder kan du prova expo-image – en direkt ersättning med bättre cachning, blurhash-platshållare och betydligt mindre hackighet i långa listor.
import { Image } from 'expo-image';
// Install: npx expo install expo-image
export default function ExpoImageExample() {
return (
<Image
source='https://picsum.photos/300/200'
placeholder='LGF5]+Yk^6#M@-5c,1J5@[or[Q6.'
contentFit='cover'
transition={300}
style={{ width: 300, height: 200, borderRadius: 12 }}
/>
);
}
// placeholder is a blurhash string — generates a blurry
// color-correct placeholder before the real image loads.Cirkulära bilder och avatarmönster
Vill du ha en rund avatar? Lägg en Image i en kvadratisk View, ange borderRadius till hälften av bredden och lägg till overflow: hidden för att beskära den till en perfekt cirkel.
import { Image, View, StyleSheet } from 'react-native';
export default function Avatar({ uri, size = 60 }) {
const radius = size / 2;
return (
<View style={[
styles.container,
{ width: size, height: size, borderRadius: radius }
]}>
<Image
source={{ uri }}
style={{ width: size, height: size }}
/>
</View>
);
}
const styles = StyleSheet.create({
container: {
overflow: 'hidden',
backgroundColor: '#e0e0e0', // placeholder while loading
},
});Ange headers för skyddade bilder
Vissa bilder kräver en inloggningstoken. Skicka med headers i source-objektet så skickar React Native dem med begäran. Hårdkoda aldrig hemligheter – läs in dem vid körning.
import { Image } from 'react-native';
export default function ProtectedImage({ token }) {
return (
<Image
source={{
uri: 'https://api.myapp.com/user/avatar',
headers: {
Authorization: 'Bearer ' + token,
'Cache-Control': 'no-cache',
},
// Optional: cache policy
cache: 'reload',
}}
style={{ width: 80, height: 80, borderRadius: 40 }}
/>
);
}ImageBackground för innehåll ovanpå bilder
Vill du placera innehåll ovanpå ett foto? ImageBackground fungerar som en View med en bild bakom sig. Ge den en storlek och placera barnen direkt ovanpå bilden.
import { ImageBackground, View, Text, StyleSheet } from 'react-native';
export default function HeroSection() {
return (
<ImageBackground
source={{ uri: 'https://picsum.photos/400/300' }}
style={styles.hero}
imageStyle={{ borderRadius: 16 }}
>
{/* Content rendered on top of the image */}
<View style={styles.overlay}>
<Text style={styles.title}>Discover React Native</Text>
<Text style={styles.subtitle}>Build mobile apps today</Text>
</View>
</ImageBackground>
);
}
const styles = StyleSheet.create({
hero: { width: '100%', height: 220, justifyContent: 'flex-end' },
overlay: { backgroundColor: 'rgba(0,0,0,0.45)', padding: 16, borderBottomLeftRadius: 16, borderBottomRightRadius: 16 },
title: { color: '#fff', fontSize: 22, fontWeight: 'bold' },
subtitle: { color: '#ddd', fontSize: 14 },
});Tips för bildcachning och prestanda
För listor med mjuk rullning bör du hålla bild-URL:er stabila, använda cachningen i expo-image och förinläsa viktiga bilder innan de visas. Hej då, flimmer.
import { Image } from 'react-native';
import { useEffect } from 'react';
// Pre-fetch images before they're needed
function usePrefetchImages(urls) {
useEffect(() => {
urls.forEach(url => {
Image.prefetch(url).catch(() => {
// ignore prefetch errors
});
});
}, [urls]);
}
// Usage:
const imageUrls = [
'https://example.com/photo1.jpg',
'https://example.com/photo2.jpg',
];
usePrefetchImages(imageUrls);Snabbtest
Snabbtest! Se hur väl delarna i Image föll på plats. 📸
Lektionssammanfattning
Bra gjort! require() läser in lokala bilder, ett uri-objekt läser in externa bilder och resizeMode: "cover" fyller en ruta. Nästa steg: att bygga ett profilkort.
Lär dig JavaScript med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 30
- Lektioner
- 120
Vanliga frågor
Är lektionen ”Visa bilder från lokala och externa källor” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen React Native Academy, inklusive ”Visa bilder från lokala och externa källor”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i React Native Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Visa bilder från lokala och externa källor”?
Läs in bilder från assets-mappen och från externa URL:er med Image-komponenten, ange resizeMode och visa platshållare under inläsningen. Ni övar på React Native Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig React Native Academy?
Du behöver inga förkunskaper. Utbildningen i React Native Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.
Hur lång tid tar lektionen ”Visa bilder från lokala och externa källor”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här React Native Academy-lektionen?
Ja. Varje React Native Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- View-komponenten som behållare
- Visa text och formatera teckensnitt
- Visa bilder från lokala och externa källor
- Skapa ett enkelt profilkort