Magento 2 Experten — Hyvä Theme, Tailwind CSS & SEO aus einer Hand ›

Props und eigene Komponenten in React Native bauen

Props und eigene Komponenten

~11 Min. Lesezeit Zuletzt aktualisiert am 8. August 2026

Jetzt bauen wir unsere erste eigene, wiederverwendbare Komponente: ProductCard. Sie wird die Grundlage für unseren Produktkatalog, den wir durch das restliche Tutorial ausbauen. Unser Projekt bekommt dabei seine erste eigene Unterordner-Datei.

Was sind Props?

"Props" (kurz für "properties") sind die Art, wie eine Komponente von außen Daten übergeben bekommt – vergleichbar mit HTML-Attributen wie <img src="..." alt="...">, nur dass Sie bei React-Komponenten selbst bestimmen, welche Props es gibt und was sie bedeuten.

HTML/WebReact Native
<img src="foto.jpg" alt="Text"> – feste, vom Browser vorgegebene Attribute<ProductCard name="..." price={9.99} /> – frei selbst definierte Props
Attribut-Werte sind immer StringsProp-Werte können jeder JavaScript-Typ sein: String, Zahl, Objekt, Funktion, sogar eine andere Komponente

Die ProductCard-Komponente

Legen Sie im Projektordner einen neuen Unterordner components/ mit der Datei ProductCard.js darin an:

components/ProductCard.js
import { View, Text, Image, StyleSheet, TouchableOpacity } from 'react-native';

function ProductCard({ name, price, imageUrl, onPress }) {
  return (
    <TouchableOpacity style={styles.card} onPress={onPress}>
      <Image source={{ uri: imageUrl }} style={styles.image} />
      <View style={styles.info}>
        <Text style={styles.name}>{name}</Text>
        <Text style={styles.price}>{price.toFixed(2)} €</Text>
      </View>
    </TouchableOpacity>
  );
}

const styles = StyleSheet.create({
  card: {
    flexDirection: 'row',
    padding: 12,
    marginBottom: 8,
    backgroundColor: '#f9fafb',
    borderRadius: 8,
    alignItems: 'center',
  },
  image: { width: 60, height: 60, borderRadius: 4 },
  info: { marginLeft: 12, flex: 1 },
  name: { fontSize: 16, fontWeight: '600' },
  price: { fontSize: 14, color: '#6b7280' },
});

export default ProductCard;

{{ name, price, imageUrl, onPress }} ist "Destrukturierung" – die Komponente holt sich diese vier benannten Werte aus dem Props-Objekt, das beim Verwenden übergeben wird. Der geschweifte Ausdruck {{name}} im JSX bedeutet: "hier den Wert der JavaScript-Variable name einsetzen" – vergleichbar mit einer Template-Engine wie z. B. Twig oder Blade in PHP-Welten ({{ '{{ name }}' }}), nur dass hier echtes JavaScript dahintersteckt.

App.js aktualisieren: die Komponente verwenden

Jetzt ersetzen wir den Inhalt von App.js komplett, importieren ProductCard und übergeben ihr konkrete Beispieldaten:

App.js
import { View, StyleSheet, Alert } from 'react-native';
import ProductCard from './components/ProductCard';

export default function App() {
  return (
    <View style={styles.container}>
      <ProductCard
        name="Wanderschuhe"
        price={89.99}
        imageUrl="https://picsum.photos/200"
        onPress={() => Alert.alert('Angeklickt!', 'Wanderschuhe')}
      />
    </View>
  );
}

const styles = StyleSheet.create({
  container: { flex: 1, paddingTop: 60, paddingHorizontal: 16 },
});

Projektstruktur nach diesem Kapitel

produktkatalog-app/
├── App.js                     (aktualisiert: importiert ProductCard)
├── app.json
├── package.json
├── components/
│   └── ProductCard.js         ← NEU
└── assets/

Speichern Sie beide Dateien und schauen Sie auf Ihr Handy: Sie sehen jetzt eine echte, klickbare Produktkarte. Jetzt können Sie beliebig viele <ProductCard /> mit unterschiedlichen Props verwenden – genau wie Sie in HTML mehrere <img>-Tags mit unterschiedlichen src-Werten verwenden würden, nur dass hier eine ganze kleine Komponente mit Layout, Bild und Klick-Verhalten wiederverwendet wird.

Tipp: Dateiname-Konvention: Komponenten-Dateien beginnen üblicherweise mit einem Großbuchstaben (ProductCard.js, nicht productCard.js) – das ist reine Konvention, aber in der React-Community fast überall gleich.