{"id":34351,"date":"2025-11-15T13:40:53","date_gmt":"2025-11-15T10:40:53","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=34351"},"modified":"2025-11-15T13:40:53","modified_gmt":"2025-11-15T10:40:53","slug":"react-native-temel-bilesenlerini-ogrenmek-mobil-uygulama-gelistirmenin-yapi-taslari","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/react-native-temel-bilesenlerini-ogrenmek-mobil-uygulama-gelistirmenin-yapi-taslari\/","title":{"rendered":"React Native Temel Bile\u015fenlerini \u00d6\u011frenmek: Mobil Uygulama Geli\u015ftirmenin Yap\u0131 Ta\u015flar\u0131"},"content":{"rendered":"<p><body><\/p>\n<h2>React Native Temel Bile\u015fenlerini \u00d6\u011frenmek: Mobil Uygulama Geli\u015ftirmenin Yap\u0131 Ta\u015flar\u0131<\/h2>\n<p>React Native, Facebook taraf\u0131ndan geli\u015ftirilen a\u00e7\u0131k kaynakl\u0131 bir mobil uygulama geli\u015ftirme \u00e7er\u00e7evesidir. Geli\u015ftiricilerin JavaScript ve React kullanarak hem Android hem de iOS platformlar\u0131 i\u00e7in yerel (native) mobil uygulamalar olu\u015fturmas\u0131na olanak tan\u0131r. Bu, &#8220;bir kere yaz, her yerde \u00e7al\u0131\u015ft\u0131r&#8221; felsefesini mobil d\u00fcnyaya ta\u015f\u0131yarak, ayr\u0131 ayr\u0131 platformlar i\u00e7in ayr\u0131 ayr\u0131 kod tabanlar\u0131 olu\u015fturma ihtiyac\u0131n\u0131 ortadan kald\u0131r\u0131r. React Native&#8217;in g\u00fcc\u00fc, temel bile\u015fenlerinde yatmaktad\u0131r. Bu bile\u015fenler, bir uygulaman\u0131n kullan\u0131c\u0131 aray\u00fcz\u00fcn\u00fc (UI) olu\u015fturan temel yap\u0131 ta\u015flar\u0131d\u0131r ve modern mobil uygulama geli\u015ftirmenin vazge\u00e7ilmez unsurlar\u0131d\u0131r.<\/p>\n<p>Bu makalede, React Native&#8217;in temel bile\u015fenlerini derinlemesine inceleyecek, her birinin amac\u0131n\u0131, kullan\u0131m\u0131n\u0131 ve pratik \u00f6rneklerini ele alaca\u011f\u0131z. Bile\u015fenlerin nas\u0131l bir araya getirildi\u011fini, stil verildi\u011fini ve \u00f6zel bile\u015fenler olu\u015fturarak uygulaman\u0131z\u0131 nas\u0131l geni\u015fletebilece\u011finizi ke\u015ffedece\u011fiz. Amac\u0131m\u0131z, React Native d\u00fcnyas\u0131na ad\u0131m atan veya bilgilerini peki\u015ftirmek isteyen geli\u015ftiricilere kapsaml\u0131 bir rehber sunmakt\u0131r.<\/p>\n<h3>React Native&#8217;in Temelleri ve Bile\u015fen Mimarisi<\/h3>\n<p>React Native&#8217;in kalbinde, her \u015feyin bir bile\u015fen oldu\u011fu fikri yatar. K\u00fc\u00e7\u00fck, yeniden kullan\u0131labilir ve ba\u011f\u0131ms\u0131z par\u00e7ac\u0131klar bir araya gelerek karma\u015f\u0131k kullan\u0131c\u0131 aray\u00fczleri olu\u015fturur. Bu mod\u00fcler yakla\u015f\u0131m, kodun daha d\u00fczenli, bak\u0131m\u0131 daha kolay ve daha \u00f6l\u00e7eklenebilir olmas\u0131n\u0131 sa\u011flar.<\/p>\n<h4>React Native Mimarisi ve \u00c7al\u0131\u015fma Prensibi<\/h4>\n<p>React Native uygulamalar\u0131, JavaScript kodunu do\u011frudan \u00e7al\u0131\u015ft\u0131ran bir JavaScript \u00e7al\u0131\u015fma zaman\u0131 (runtime) ile yerel UI bile\u015fenleri aras\u0131nda bir k\u00f6pr\u00fc (bridge) kurarak \u00e7al\u0131\u015f\u0131r. Geli\u015ftiriciler JavaScript ile kod yazarken, React Native bu kodu al\u0131r ve platforma \u00f6zg\u00fc (Android i\u00e7in Java\/Kotlin, iOS i\u00e7in Objective-C\/Swift) yerel bile\u015fenlere d\u00f6n\u00fc\u015ft\u00fcr\u00fcr. Bu sayede, uygulaman\u0131z WebView tabanl\u0131 hibrit uygulamalar gibi de\u011fil, ger\u00e7ek bir yerel uygulama gibi g\u00f6r\u00fcn\u00fcr ve hissettirir. Bile\u015fenler, bu k\u00f6pr\u00fcn\u00fcn temel unsurlar\u0131d\u0131r ve JavaScript katman\u0131ndan yerel katmana komutlar g\u00f6ndererek UI&#8217;y\u0131 g\u00fcnceller.<\/p>\n<h4>JSX: JavaScript XML<\/h4>\n<p>React Native&#8217;de UI olu\u015ftururken JSX (JavaScript XML) ad\u0131 verilen bir s\u00f6zdizimi uzant\u0131s\u0131 kullan\u0131r\u0131z. JSX, JavaScript i\u00e7inde XML\/HTML benzeri bir yap\u0131 yazmam\u0131za olanak tan\u0131r. Bu, UI&#8217;n\u0131n nas\u0131l g\u00f6r\u00fcnece\u011fini do\u011frudan JavaScript kodu i\u00e7inde tan\u0131mlamay\u0131 \u00e7ok daha sezgisel hale getirir.<\/p>\n<p>\u00d6rnek:<\/p>\n<pre><code class=\"language-jsx\">import React from 'react';\nimport { View, Text } from 'react-native';\n\nconst MyComponent = () => {\n  return (\n    <View>\n      <Text>Merhaba, React Native!<\/Text>\n    <\/View>\n  );\n};\n\nexport default MyComponent;<\/code><\/pre>\n<p>Yukar\u0131daki \u00f6rnekte <code><View><\/code> ve <code><Text><\/code> gibi etiketler, React Native&#8217;in yerel bile\u015fenleridir ve JSX arac\u0131l\u0131\u011f\u0131yla kullan\u0131lm\u0131\u015ft\u0131r.<\/p>\n<h4>Props (Properties): Bile\u015fenler Aras\u0131 Veri Ak\u0131\u015f\u0131<\/h4>\n<p>Props, React Native&#8217;deki bile\u015fenler aras\u0131nda veri aktar\u0131m\u0131n\u0131n temel mekanizmas\u0131d\u0131r. Bir \u00fcst bile\u015fenden alt bile\u015fene veri g\u00f6ndermek i\u00e7in kullan\u0131l\u0131rlar. Props&#8217;lar tek y\u00f6nl\u00fcd\u00fcr (\u00fcstten alta do\u011fru akar) ve bir bile\u015fen taraf\u0131ndan al\u0131nd\u0131ktan sonra de\u011fi\u015ftirilemezler (read-only). Bu, bile\u015fenlerin tahmin edilebilir ve izole olmas\u0131n\u0131 sa\u011flar.<\/p>\n<p>\u00d6rnek:<\/p>\n<pre><code class=\"language-jsx\">import React from 'react';\nimport { View, Text } from 'react-native';\n\nconst Greeting = (props) => {\n  return (\n    <View>\n      <Text>Merhaba, {props.name}!<\/Text>\n    <\/View>\n  );\n};\n\nconst App = () => {\n  return (\n    <View>\n      <Greeting name=\"Ali\" \/>\n      <Greeting name=\"Ay\u015fe\" \/>\n    <\/View>\n  );\n};\n\nexport default App;<\/code><\/pre>\n<p>Bu \u00f6rnekte, <code>Greeting<\/code> bile\u015feni <code>name<\/code> ad\u0131nda bir prop al\u0131r ve bu prop&#8217;u kullanarak ki\u015fiselle\u015ftirilmi\u015f bir mesaj g\u00f6r\u00fcnt\u00fcler. <code>App<\/code> bile\u015feni, <code>Greeting<\/code> bile\u015fenine farkl\u0131 <code>name<\/code> prop&#8217;lar\u0131 g\u00f6ndererek iki farkl\u0131 selamlama olu\u015fturur.<\/p>\n<h4>State: Bile\u015fenin Dahili Durumunu Y\u00f6netme<\/h4>\n<p>State (durum), bir bile\u015fenin kendi i\u00e7inde y\u00f6netti\u011fi ve zamanla de\u011fi\u015febilen verilerdir. Kullan\u0131c\u0131 etkile\u015fimleri, API \u00e7a\u011fr\u0131lar\u0131ndan gelen veriler veya zamanlay\u0131c\u0131lar gibi olaylar sonucunda bile\u015fenin durumu de\u011fi\u015febilir ve bu de\u011fi\u015fimler genellikle UI&#8217;n\u0131n yeniden render edilmesine neden olur. Fonksiyonel bile\u015fenlerde <code>useState<\/code> hook&#8217;u ile state y\u00f6netimi yap\u0131l\u0131r.<\/p>\n<p>\u00d6rnek:<\/p>\n<pre><code class=\"language-jsx\">import React, { useState } from 'react';\nimport { View, Text, Button } from 'react-native';\n\nconst Counter = () => {\n  const [count, setCount] = useState(0); \/\/ count ad\u0131nda bir state ve onu g\u00fcncelleyen setCount fonksiyonu\n\n  return (\n    <View>\n      <Text>Say\u0131m: {count}<\/Text>\n      <Button title=\"Artt\u0131r\" onPress={() => setCount(count + 1)} \/>\n      <Button title=\"Azalt\" onPress={() => setCount(count - 1)} \/>\n    <\/View>\n  );\n};\n\nexport default Counter;<\/code><\/pre>\n<p>Bu \u00f6rnekte, <code>Counter<\/code> bile\u015feni <code>count<\/code> ad\u0131nda bir state tutar. Butonlara bas\u0131ld\u0131\u011f\u0131nda <code>setCount<\/code> fonksiyonu \u00e7a\u011fr\u0131larak <code>count<\/code> de\u011feri g\u00fcncellenir ve UI otomatik olarak yeniden render edilir.<\/p>\n<h3>React Native \u00c7ekirdek Bile\u015fenleri<\/h3>\n<p>React Native, mobil uygulamalar geli\u015ftirmek i\u00e7in bir dizi yerle\u015fik, temel bile\u015fen sunar. Bu bile\u015fenler, platforma \u00f6zg\u00fc UI elemanlar\u0131n\u0131n JavaScript kar\u015f\u0131l\u0131klar\u0131d\u0131r ve \u00e7o\u011fu uygulaman\u0131n temelini olu\u015fturur.<\/p>\n<h4>View: Temel Kapsay\u0131c\u0131<\/h4>\n<p><code>View<\/code>, React Native&#8217;deki en temel ve en \u00e7ok kullan\u0131lan bile\u015fendir. Bir web uygulamas\u0131ndaki <code><\/p>\n<div><\/code> etiketine benzer \u015fekilde \u00e7al\u0131\u015f\u0131r. Di\u011fer bile\u015fenleri d\u00fczenlemek, gruplamak ve stil vermek i\u00e7in bir kapsay\u0131c\u0131 olarak kullan\u0131l\u0131r. <code>View<\/code> bile\u015fenleri, Flexbox layout sistemi ile birlikte \u00e7al\u0131\u015farak g\u00fc\u00e7l\u00fc ve esnek UI d\u00fczenleri olu\u015fturman\u0131za olanak tan\u0131r.<\/p>\n<p>\u00d6zellikleri:<br \/>\n*   <strong>Stil:<\/strong> <code>backgroundColor<\/code>, <code>padding<\/code>, <code>margin<\/code>, <code>flexDirection<\/code> gibi bir\u00e7ok stil \u00f6zelli\u011fini destekler.<br \/>\n*   <strong>\u0130\u00e7 \u0130\u00e7e Kullan\u0131m:<\/strong> Di\u011fer <code>View<\/code>&#8216;leri ve di\u011fer t\u00fcm bile\u015fenleri i\u00e7erebilir.<\/p>\n<p>\u00d6rnek:<\/p>\n<pre><code class=\"language-jsx\">import React from 'react';\nimport { View, StyleSheet } from 'react-native';\n\nconst AppContainer = () => {\n  return (\n    <View style={styles.container}>\n      <View style={styles.box1} \/>\n      <View style={styles.box2} \/>\n    <\/View>\n  );\n};\n\nconst styles = StyleSheet.create({\n  container: {\n    flex: 1,\n    flexDirection: 'row', \/\/ Yatay d\u00fczen\n    justifyContent: 'space-around',\n    alignItems: 'center',\n    backgroundColor: '#f0f0f0',\n  },\n  box1: {\n    width: 100,\n    height: 100,\n    backgroundColor: 'red',\n  },\n  box2: {\n    width: 100,\n    height: 100,\n    backgroundColor: 'blue',\n  },\n});\n\nexport default AppContainer;<\/code><\/pre>\n<h4>Text: Metin G\u00f6r\u00fcnt\u00fcleme<\/h4>\n<p><code>Text<\/code> bile\u015feni, uygulaman\u0131zda metin g\u00f6r\u00fcnt\u00fclemek i\u00e7in kullan\u0131l\u0131r. T\u00fcm metinler bir <code>Text<\/code> bile\u015feni i\u00e7inde yer almal\u0131d\u0131r; do\u011frudan bir <code>View<\/code> i\u00e7ine metin yazamazs\u0131n\u0131z. <code>Text<\/code> bile\u015feni, i\u00e7 i\u00e7e metinler i\u00e7in de kullan\u0131labilir ve bu, metnin farkl\u0131 b\u00f6l\u00fcmlerine farkl\u0131 stiller uygulaman\u0131z\u0131 sa\u011flar.<\/p>\n<p>\u00d6zellikleri:<br \/>\n*   <strong>Stil:<\/strong> <code>fontSize<\/code>, <code>color<\/code>, <code>fontWeight<\/code>, <code>textAlign<\/code> gibi metinle ilgili bir\u00e7ok stil \u00f6zelli\u011fini destekler.<br \/>\n*   <strong>\u0130\u00e7 \u0130\u00e7e Metinler:<\/strong> \u0130\u00e7 i\u00e7e <code>Text<\/code> bile\u015fenleri, \u00fcst bile\u015fenin stilini miras alabilir veya kendi stilini ge\u00e7ersiz k\u0131labilir.<\/p>\n<p>\u00d6rnek:<\/p>\n<pre><code class=\"language-jsx\">import React from 'react';\nimport { View, Text, StyleSheet } from 'react-native';\n\nconst TextExample = () => {\n  return (\n    <View style={styles.container}>\n      <Text style={styles.baseText}>\n        Bu bir {' '}\n        <Text style={styles.boldText}>kal\u0131n<\/Text> {' '}\n        ve {' '}\n        <Text style={styles.italicText}>italik<\/Text> {' '}\n        metin \u00f6rne\u011fidir.\n      <\/Text>\n    <\/View>\n  );\n};\n\nconst styles = StyleSheet.create({\n  container: {\n    padding: 20,\n  },\n  baseText: {\n    fontSize: 16,\n    color: '#333',\n  },\n  boldText: {\n    fontWeight: 'bold',\n    color: 'navy',\n  },\n  italicText: {\n    fontStyle: 'italic',\n    color: 'green',\n  },\n});\n\nexport default TextExample;<\/code><\/pre>\n<h4>Image: Resim G\u00f6r\u00fcnt\u00fcleme<\/h4>\n<p><code>Image<\/code> bile\u015feni, uygulaman\u0131zda resim g\u00f6r\u00fcnt\u00fclemek i\u00e7in kullan\u0131l\u0131r. Hem yerel kaynaklardan (uygulama paketi i\u00e7inde) hem de a\u011fdan (URL \u00fczerinden) resim y\u00fckleyebilir.<\/p>\n<p>\u00d6zellikleri:<br \/>\n*   <strong><code>source<\/code>:<\/strong> Resmin kayna\u011f\u0131n\u0131 belirtir. <code>{ uri: 'http:\/\/...' }<\/code> veya <code>require('.\/path\/to\/image.png')<\/code> \u015feklinde olabilir.<br \/>\n*   <strong><code>resizeMode<\/code>:<\/strong> Resmin boyutland\u0131r\u0131lma \u015feklini kontrol eder (<code>cover<\/code>, <code>contain<\/code>, <code>stretch<\/code>, <code>repeat<\/code>, <code>center<\/code>).<br \/>\n*   <strong><code>style<\/code>:<\/strong> <code>width<\/code>, <code>height<\/code>, <code>borderRadius<\/code> gibi stil \u00f6zellikleri.<\/p>\n<p>\u00d6rnek:<\/p>\n<pre><code class=\"language-jsx\">import React from 'react';\nimport { View, Image, StyleSheet } from 'react-native';\n\nconst ImageExample = () => {\n  return (\n    <View style={styles.container}>\n      <Image\n        source={{ uri: 'https:\/\/reactnative.dev\/img\/tiny_logo.png' }}\n        style={styles.remoteImage}\n      \/>\n      <Image\n        source={require('.\/assets\/local_logo.png')} \/\/ Varsay\u0131msal yerel resim\n        style={styles.localImage}\n      \/>\n    <\/View>\n  );\n};\n\nconst styles = StyleSheet.create({\n  container: {\n    flexDirection: 'row',\n    justifyContent: 'space-around',\n    alignItems: 'center',\n    padding: 20,\n  },\n  remoteImage: {\n    width: 100,\n    height: 100,\n    resizeMode: 'contain',\n  },\n  localImage: {\n    width: 120,\n    height: 120,\n    borderRadius: 60, \/\/ Yuvarlak resim\n  },\n});\n\nexport default ImageExample;<\/code><\/pre>\n<p>Yerel resimler i\u00e7in <code>require()<\/code> kullan\u0131rken, resmin projenin <code>assets<\/code> klas\u00f6r\u00fc gibi bir yerde oldu\u011fundan emin olun.<\/p>\n<h4>TextInput: Kullan\u0131c\u0131 Giri\u015fi Alma<\/h4>\n<p><code>TextInput<\/code> bile\u015feni, kullan\u0131c\u0131lardan metin giri\u015fi almak i\u00e7in kullan\u0131l\u0131r. Formlarda, arama \u00e7ubuklar\u0131nda ve di\u011fer metin tabanl\u0131 etkile\u015fimlerde temel bir rol oynar.<\/p>\n<p>\u00d6zellikleri:<br \/>\n*   <strong><code>value<\/code>:<\/strong> Giri\u015f alan\u0131n\u0131n mevcut de\u011feri. Genellikle bir state de\u011fi\u015fkeniyle ba\u011flan\u0131r.<br \/>\n*   <strong><code>onChangeText<\/code>:<\/strong> Metin her de\u011fi\u015fti\u011finde \u00e7a\u011fr\u0131lan bir geri arama fonksiyonu.<br \/>\n*   <strong><code>placeholder<\/code>:<\/strong> Giri\u015f yap\u0131lmad\u0131\u011f\u0131nda g\u00f6r\u00fcnen gri metin.<br \/>\n*   <strong><code>keyboardType<\/code>:<\/strong> Sanal klavye t\u00fcr\u00fcn\u00fc ayarlar (<code>default<\/code>, <code>numeric<\/code>, <code>email-address<\/code>, vb.).<br \/>\n*   <strong><code>secureTextEntry<\/code>:<\/strong> \u015eifre gibi hassas veriler i\u00e7in metni gizler.<\/p>\n<p>\u00d6rnek:<\/p>\n<pre><code class=\"language-jsx\">import React, { useState } from 'react';\nimport { View, TextInput, Text, StyleSheet } from 'react-native';\n\nconst TextInputExample = () => {\n  const [text, setText] = useState('');\n\n  return (\n    <View style={styles.container}>\n      <TextInput\n        style={styles.input}\n        placeholder=\"Buraya yaz\u0131n...\"\n        onChangeText={newText => setText(newText)}\n        defaultValue={text}\n      \/>\n      <Text style={styles.displayText}>Girdi\u011finiz Metin: {text}<\/Text>\n    <\/View>\n  );\n};\n\nconst styles = StyleSheet.create({\n  container: {\n    padding: 20,\n  },\n  input: {\n    height: 40,\n    borderColor: 'gray',\n    borderWidth: 1,\n    paddingHorizontal: 10,\n    marginBottom: 20,\n  },\n  displayText: {\n    fontSize: 18,\n  },\n});\n\nexport default TextInputExample;<\/code><\/pre>\n<h4>Button: Basit D\u00fc\u011fme<\/h4>\n<p><code>Button<\/code> bile\u015feni, basit ve standart bir d\u00fc\u011fme olu\u015fturmak i\u00e7in kullan\u0131l\u0131r. Platforma \u00f6zg\u00fc bir g\u00f6r\u00fcn\u00fcm sunar (Android&#8217;de Material Design, iOS&#8217;te Cupertino).<\/p>\n<p>\u00d6zellikleri:<br \/>\n*   <strong><code>title<\/code>:<\/strong> D\u00fc\u011fmede g\u00f6r\u00fcnt\u00fclenecek metin.<br \/>\n*   <strong><code>onPress<\/code>:<\/strong> D\u00fc\u011fmeye bas\u0131ld\u0131\u011f\u0131nda \u00e7a\u011fr\u0131lan fonksiyon.<br \/>\n*   <strong><code>color<\/code>:<\/strong> D\u00fc\u011fmenin rengi (platforma g\u00f6re farkl\u0131l\u0131k g\u00f6sterebilir).<br \/>\n*   <strong><code>disabled<\/code>:<\/strong> D\u00fc\u011fmeyi devre d\u0131\u015f\u0131 b\u0131rak\u0131r.<\/p>\n<p>\u00d6rnek:<\/p>\n<pre><code class=\"language-jsx\">import React from 'react';\nimport { View, Button, Alert, StyleSheet } from 'react-native';\n\nconst ButtonExample = () => {\n  const handlePress = () => {\n    Alert.alert('Butona Bas\u0131ld\u0131!', 'Harika bir i\u015f \u00e7\u0131kard\u0131n.');\n  };\n\n  return (\n    <View style={styles.container}>\n      <Button\n        title=\"Bana Bas!\"\n        onPress={handlePress}\n        color=\"#841584\"\n      \/>\n      <View style={styles.separator} \/>\n      <Button\n        title=\"Devre D\u0131\u015f\u0131 D\u00fc\u011fme\"\n        onPress={() => console.log('Bu buton \u00e7al\u0131\u015fmaz.')}\n        disabled\n      \/>\n    <\/View>\n  );\n};\n\nconst styles = StyleSheet.create({\n  container: {\n    flex: 1,\n    justifyContent: 'center',\n    paddingHorizontal: 20,\n  },\n  separator: {\n    marginVertical: 10,\n  },\n});\n\nexport default ButtonExample;<\/code><\/pre>\n<h4>TouchableOpacity \/ Pressable: \u00d6zelle\u015ftirilebilir D\u00fc\u011fmeler<\/h4>\n<p><code>Button<\/code> bile\u015feni basit i\u015fler i\u00e7in yeterli olsa da, genellikle daha fazla \u00f6zelle\u015ftirmeye ihtiya\u00e7 duyar\u0131z. <code>TouchableOpacity<\/code> ve <code>Pressable<\/code> bile\u015fenleri, herhangi bir bile\u015feni (View, Text, Image vb.) bas\u0131labilir hale getirerek bu esnekli\u011fi sa\u011flar.<\/p>\n<p>*   <strong><code>TouchableOpacity<\/code>:<\/strong> Bas\u0131ld\u0131\u011f\u0131nda opakl\u0131\u011f\u0131n\u0131 azaltarak g\u00f6rsel bir geri bildirim sa\u011flar.<br \/>\n*   <strong><code>Pressable<\/code>:<\/strong> <code>TouchableOpacity<\/code>&#8216;den daha yeni ve daha esnek bir bile\u015fendir. <code>onPress<\/code>, <code>onLongPress<\/code>, <code>onPressIn<\/code>, <code>onPressOut<\/code> gibi daha fazla etkile\u015fim geri bildirimi sunar ve bas\u0131lma durumuna g\u00f6re stil de\u011fi\u015fiklikleri yapma yetene\u011fi sa\u011flar.<\/p>\n<p>\u00d6rnek (<code>Pressable<\/code> ile):<\/p>\n<pre><code class=\"language-jsx\">import React, { useState } from 'react';\nimport { View, Text, Pressable, StyleSheet } from 'react-native';\n\nconst CustomButton = () => {\n  const [timesPressed, setTimesPressed] = useState(0);\n\n  return (\n    <View style={styles.container}>\n      <Pressable\n        onPress={() => setTimesPressed(current => current + 1)}\n        style={({ pressed }) => [\n          styles.button,\n          { backgroundColor: pressed ? 'darkblue' : 'navy' },\n        ]}\n      >\n        <Text style={styles.buttonText}>\n          {timesPressed > 0 ? <code>Bana ${timesPressed} kez bast\u0131n!<\/code> : 'Bana Bas!'}\n        <\/Text>\n      <\/Pressable>\n    <\/View>\n  );\n};\n\nconst styles = StyleSheet.create({\n  container: {\n    flex: 1,\n    justifyContent: 'center',\n    alignItems: 'center',\n  },\n  button: {\n    paddingVertical: 12,\n    paddingHorizontal: 32,\n    borderRadius: 4,\n    elevation: 3,\n  },\n  buttonText: {\n    fontSize: 16,\n    lineHeight: 21,\n    fontWeight: 'bold',\n    letterSpacing: 0.25,\n    color: 'white',\n  },\n});\n\nexport default CustomButton;<\/code><\/pre>\n<h4>ScrollView: Kayd\u0131r\u0131labilir \u0130\u00e7erik<\/h4>\n<p><code>ScrollView<\/code>, i\u00e7eri\u011fi ekran boyutundan daha b\u00fcy\u00fck oldu\u011funda kayd\u0131r\u0131labilir hale getiren bir kapsay\u0131c\u0131d\u0131r. T\u00fcm i\u00e7eri\u011fi tek seferde render eder, bu nedenle \u00e7ok uzun listeler i\u00e7in performans sorunlar\u0131 yaratabilir.<\/p>\n<p>\u00d6zellikleri:<br \/>\n*   <strong><code>horizontal<\/code>:<\/strong> \u0130\u00e7eri\u011fi yatay olarak kayd\u0131rmak i\u00e7in <code>true<\/code> olarak ayarlan\u0131r.<br \/>\n*   <strong><code>showsVerticalScrollIndicator<\/code> \/ <code>showsHorizontalScrollIndicator<\/code>:<\/strong> Kayd\u0131rma \u00e7ubuklar\u0131n\u0131 g\u00f6sterip gizler.<br \/>\n*   <strong><code>contentContainerStyle<\/code>:<\/strong> Kayd\u0131r\u0131labilir i\u00e7eri\u011fin stilini belirtir.<\/p>\n<p>\u00d6rnek:<\/p>\n<pre><code class=\"language-jsx\">import React from 'react';\nimport { ScrollView, Text, StyleSheet } from 'react-native';\n\nconst ScrollViewExample = () => {\n  const items = Array.from({ length: 50 }, (_, i) => <code>\u00d6\u011fe ${i + 1}<\/code>);\n\n  return (\n    <ScrollView style={styles.container}>\n      {items.map((item, index) => (\n        <Text key={index} style={styles.item}>\n          {item}\n        <\/Text>\n      ))}\n    <\/ScrollView>\n  );\n};\n\nconst styles = StyleSheet.create({\n  container: {\n    flex: 1,\n    padding: 20,\n  },\n  item: {\n    fontSize: 20,\n    padding: 10,\n    marginVertical: 5,\n    backgroundColor: '#eee',\n    borderBottomWidth: 1,\n    borderColor: '#ccc',\n  },\n});\n\nexport default ScrollViewExample;<\/code><\/pre>\n<h4>FlatList \/ SectionList: Verimli Liste G\u00f6r\u00fcnt\u00fcleme<\/h4>\n<p><code>FlatList<\/code> ve <code>SectionList<\/code>, uzun listeleri veya b\u00fcy\u00fck veri k\u00fcmelerini verimli bir \u015fekilde g\u00f6r\u00fcnt\u00fclemek i\u00e7in tasarlanm\u0131\u015ft\u0131r. <code>ScrollView<\/code>&#8216;in aksine, yaln\u0131zca ekranda g\u00f6r\u00fcnen \u00f6\u011feleri render ederek performans\u0131 optimize ederler.<\/p>\n<p>*   <strong><code>FlatList<\/code>:<\/strong> Basit, tek boyutlu listeler i\u00e7in.<br \/>\n*   <strong><code>SectionList<\/code>:<\/strong> Verileri b\u00f6l\u00fcmler halinde grupland\u0131r\u0131lm\u0131\u015f listeler i\u00e7in (\u00f6rne\u011fin, alfabetik olarak s\u0131ralanm\u0131\u015f ki\u015filer listesi).<\/p>\n<p>\u00d6zellikleri (<code>FlatList<\/code> i\u00e7in):<br \/>\n*   <strong><code>data<\/code>:<\/strong> Render edilecek \u00f6\u011felerin dizisi.<br \/>\n*   <strong><code>renderItem<\/code>:<\/strong> Her bir \u00f6\u011fenin nas\u0131l render edilece\u011fini tan\u0131mlayan bir fonksiyon. <code>({ item }) => <MyListItem item={item} \/><\/code> gibi.<br \/>\n*   <strong><code>keyExtractor<\/code>:<\/strong> Her bir \u00f6\u011fe i\u00e7in benzersiz bir anahtar sa\u011flayan bir fonksiyon. Performans ve liste \u00f6\u011felerinin do\u011fru bir \u015fekilde g\u00fcncellenmesi i\u00e7in kritik.<\/p>\n<p>\u00d6rnek (<code>FlatList<\/code> ile):<\/p>\n<pre><code class=\"language-jsx\">import React from 'react';\nimport { FlatList, Text, StyleSheet, View } from 'react-native';\n\nconst DATA = [\n  { id: '1', title: 'Birinci \u00d6\u011fe' },\n  { id: '2', title: '\u0130kinci \u00d6\u011fe' },\n  { id: '3', title: '\u00dc\u00e7\u00fcnc\u00fc \u00d6\u011fe' },\n  { id: '4', title: 'D\u00f6rd\u00fcnc\u00fc \u00d6\u011fe' },\n  { id: '5', title: 'Be\u015finci \u00d6\u011fe' },\n  \/\/ ... daha fazla \u00f6\u011fe\n];\n\nconst Item = ({ title }) => (\n  <View style={styles.item}>\n    <Text style={styles.title}>{title}<\/Text>\n  <\/View>\n);\n\nconst FlatListExample = () => {\n  return (\n    <FlatList\n      data={DATA}\n      renderItem={({ item }) => <Item title={item.title} \/>}\n      keyExtractor={item => item.id}\n      style={styles.container}\n    \/>\n  );\n};\n\nconst styles = StyleSheet.create({\n  container: {\n    flex: 1,\n    marginTop: 20,\n  },\n  item: {\n    backgroundColor: '#f9c2ff',\n    padding: 20,\n    marginVertical: 8,\n    marginHorizontal: 16,\n  },\n  title: {\n    fontSize: 20,\n  },\n});\n\nexport default FlatListExample;<\/code><\/pre>\n<h4>ActivityIndicator: Y\u00fckleme G\u00f6stergesi<\/h4>\n<p><code>ActivityIndicator<\/code>, bir i\u015flem devam ederken kullan\u0131c\u0131ya geri bildirim sa\u011flayan bir y\u00fckleme animasyonudur (spinner).<\/p>\n<p>\u00d6zellikleri:<br \/>\n*   <strong><code>animating<\/code>:<\/strong> G\u00f6stergenin g\u00f6r\u00fcn\u00fcp g\u00f6r\u00fcnmeyece\u011fini kontrol eder.<br \/>\n*   <strong><code>color<\/code>:<\/strong> G\u00f6stergenin rengi.<br \/>\n*   <strong><code>size<\/code>:<\/strong> G\u00f6stergenin boyutu (<code>small<\/code>, <code>large<\/code> veya say\u0131).<\/p>\n<p>\u00d6rnek:<\/p>\n<pre><code class=\"language-jsx\">import React, { useState } from 'react';\nimport { View, ActivityIndicator, Button, StyleSheet } from 'react-native';\n\nconst LoadingIndicator = () => {\n  const [isLoading, setIsLoading] = useState(false);\n\n  return (\n    <View style={styles.container}>\n      <ActivityIndicator size=\"large\" color=\"#0000ff\" animating={isLoading} \/>\n      <Button\n        title={isLoading ? \"Y\u00fckleniyor...\" : \"Y\u00fcklemeyi Ba\u015flat\"}\n        onPress={() => setIsLoading(!isLoading)}\n      \/>\n    <\/View>\n  );\n};\n\nconst styles = StyleSheet.create({\n  container: {\n    flex: 1,\n    justifyContent: 'center',\n    alignItems: 'center',\n  },\n});\n\nexport default LoadingIndicator;<\/code><\/pre>\n<h4>Switch: A\u00e7ma\/Kapama Anahtar\u0131<\/h4>\n<p><code>Switch<\/code> bile\u015feni, bir ayar\u0131 a\u00e7\u0131p kapatmak i\u00e7in kullan\u0131lan bir anahtard\u0131r.<\/p>\n<p>\u00d6zellikleri:<br \/>\n*   <strong><code>value<\/code>:<\/strong> Anahtar\u0131n mevcut durumu (<code>true<\/code> veya <code>false<\/code>).<br \/>\n*   <strong><code>onValueChange<\/code>:<\/strong> Anahtar\u0131n durumu de\u011fi\u015fti\u011finde \u00e7a\u011fr\u0131lan fonksiyon.<br \/>\n*   <strong><code>trackColor<\/code>:<\/strong> Anahtar\u0131n iz rengini kontrol eder.<br \/>\n*   <strong><code>thumbColor<\/code>:<\/strong> Anahtar\u0131n ba\u015fparmak (d\u00fc\u011fme) rengini kontrol eder.<\/p>\n<p>\u00d6rnek:<\/p>\n<pre><code class=\"language-jsx\">import React, { useState } from 'react';\nimport { View, Switch, Text, StyleSheet } from 'react-native';\n\nconst SwitchExample = () => {\n  const [isEnabled, setIsEnabled] = useState(false);\n  const toggleSwitch = () => setIsEnabled(previousState => !previousState);\n\n  return (\n    <View style={styles.container}>\n      <Text style={styles.label}>Bildirimler: <\/Text>\n      <Switch\n        trackColor={{ false: '#767577', true: '#81b0ff' }}\n        thumbColor={isEnabled ? '#f5dd4b' : '#f4f3f4'}\n        ios_backgroundColor=\"#3e3e3e\"\n        onValueChange={toggleSwitch}\n        value={isEnabled}\n      \/>\n      <Text style={styles.status}>Durum: {isEnabled ? 'A\u00e7\u0131k' : 'Kapal\u0131'}<\/Text>\n    <\/View>\n  );\n};\n\nconst styles = StyleSheet.create({\n  container: {\n    flex: 1,\n    justifyContent: 'center',\n    alignItems: 'center',\n    flexDirection: 'row',\n  },\n  label: {\n    fontSize: 18,\n    marginRight: 10,\n  },\n  status: {\n    fontSize: 18,\n    marginLeft: 10,\n  },\n});\n\nexport default SwitchExample;<\/code><\/pre>\n<h3>Bile\u015fenleri Birle\u015ftirmek ve Yap\u0131land\u0131rmak<\/h3>\n<p>React Native&#8217;de temel bile\u015fenleri tek ba\u015f\u0131na kullanmak yerine, onlar\u0131 birle\u015ftirerek daha karma\u015f\u0131k ve i\u015flevsel kullan\u0131c\u0131 aray\u00fczleri olu\u015ftururuz. Bu, uygulaman\u0131z\u0131n g\u00f6r\u00fcn\u00fcm\u00fcn\u00fc ve hissini kontrol etmek i\u00e7in stil verme ve d\u00fczenleme tekniklerini anlamay\u0131 gerektirir.<\/p>\n<h4>Hiyerar\u015fi ve \u0130\u00e7 \u0130\u00e7e Yerle\u015ftirme<\/h4>\n<p>React Native bile\u015fenleri, bir a\u011fa\u00e7 yap\u0131s\u0131 gibi i\u00e7 i\u00e7e yerle\u015ftirilir. Bir <code>View<\/code> di\u011fer <code>View<\/code>&#8216;leri, <code>Text<\/code>&#8216;leri, <code>Image<\/code>&#8216;leri ve di\u011fer t\u00fcm bile\u015fenleri i\u00e7erebilir. Bu hiyerar\u015fik yap\u0131, uygulaman\u0131z\u0131n g\u00f6rsel d\u00fczenini ve bile\u015fenler aras\u0131 ili\u015fkileri tan\u0131mlar.<\/p>\n<pre><code class=\"language-jsx\"><View style={styles.card}>\n  <Image source={...} style={styles.cardImage} \/>\n  <View style={styles.cardContent}>\n    <Text style={styles.cardTitle}>\u00dcr\u00fcn Ad\u0131<\/Text>\n    <Text style={styles.cardDescription}>K\u0131sa a\u00e7\u0131klama burada.<\/Text>\n    <Button title=\"Sepete Ekle\" onPress={...} \/>\n  <\/View>\n<\/View><\/code><\/pre>\n<p>Yukar\u0131daki \u00f6rnekte, bir <code>View<\/code> ana kapsay\u0131c\u0131 olarak g\u00f6rev yaparken, i\u00e7inde bir <code>Image<\/code> ve ba\u015fka bir <code>View<\/code> (metinler ve buton i\u00e7in) bar\u0131nd\u0131r\u0131r. Bu, mod\u00fcler ve okunabilir bir yap\u0131 sa\u011flar.<\/p>\n<h4>Stil Verme (Styling)<\/h4>\n<p>React Native&#8217;de stil verme, CSS&#8217;e benzer ancak baz\u0131 farkl\u0131l\u0131klar\u0131 vard\u0131r. En yayg\u0131n stil verme y\u00f6ntemi, JavaScript nesneleri kullanarak stil tan\u0131mlamakt\u0131r.<\/p>\n<h5>StyleSheet.create<\/h5>\n<p>En iyi uygulama, stilleri <code>StyleSheet.create<\/code> kullanarak ayr\u0131 bir JavaScript nesnesi i\u00e7inde tan\u0131mlamakt\u0131r. Bu, stillerinizi organize eder, okunabilirli\u011fi art\u0131r\u0131r ve performans optimizasyonlar\u0131na olanak tan\u0131r.<\/p>\n<pre><code class=\"language-jsx\">import { StyleSheet } from 'react-native';\n\nconst styles = StyleSheet.create({\n  container: {\n    flex: 1,\n    backgroundColor: '#fff',\n    alignItems: 'center',\n    justifyContent: 'center',\n  },\n  title: {\n    fontSize: 24,\n    fontWeight: 'bold',\n    color: 'blue',\n  },\n});<\/code><\/pre>\n<h5>Inline Stiller<\/h5>\n<p>K\u00fc\u00e7\u00fck ve dinamik stil de\u011fi\u015fiklikleri i\u00e7in do\u011frudan bile\u015fenin <code>style<\/code> prop&#8217;una bir JavaScript nesnesi ge\u00e7irebilirsiniz. Ancak, bu b\u00fcy\u00fck uygulamalarda kodun karma\u015f\u0131kl\u0131\u011f\u0131n\u0131 art\u0131rabilir.<\/p>\n<pre><code class=\"language-jsx\"><Text style={{ fontSize: 18, color: 'red' }}>Hata Mesaj\u0131<\/Text><\/code><\/pre>\n<h5>\u00c7oklu Stiller<\/h5>\n<p>Bir bile\u015fene birden fazla stil uygulayabilirsiniz. Stiller bir dizi i\u00e7inde ge\u00e7irilirse, dizideki son stil \u00f6nceki stilleri ge\u00e7ersiz k\u0131lar.<\/p>\n<pre><code class=\"language-jsx\"><Text style={[styles.baseText, styles.highlightedText]}>Vurgulanm\u0131\u015f Metin<\/Text><\/code><\/pre>\n<h5>Flexbox ile D\u00fczen<\/h5>\n<p>React Native&#8217;deki d\u00fczen (layout) sistemi tamamen Flexbox \u00fczerine kuruludur. Flexbox, bir kapsay\u0131c\u0131 i\u00e7indeki \u00f6\u011felerin nas\u0131l d\u00fczenlenece\u011fini, hizalanaca\u011f\u0131n\u0131 ve da\u011f\u0131t\u0131laca\u011f\u0131n\u0131 kontrol etmek i\u00e7in g\u00fc\u00e7l\u00fc ve esnek bir yoldur.<\/p>\n<p>Temel Flexbox \u00d6zellikleri:<br \/>\n*   <strong><code>flex<\/code>:<\/strong> Bir \u00f6\u011fenin kapsay\u0131c\u0131 i\u00e7inde ne kadar alan kaplayaca\u011f\u0131n\u0131 belirler. <code>flex: 1<\/code> genellikle bir bile\u015fenin mevcut t\u00fcm alan\u0131 doldurmas\u0131n\u0131 sa\u011flar.<br \/>\n*   <strong><code>flexDirection<\/code>:<\/strong> \u00d6\u011felerin ana eksen boyunca hangi y\u00f6nde d\u00fczenlenece\u011fini belirler (<code>row<\/code> &#8211; yatay, <code>column<\/code> &#8211; dikey, varsay\u0131lan).<br \/>\n*   <strong><code>justifyContent<\/code>:<\/strong> \u00d6\u011felerin ana eksen boyunca nas\u0131l hizalanaca\u011f\u0131n\u0131 belirler (<code>flex-start<\/code>, <code>center<\/code>, <code>flex-end<\/code>, <code>space-around<\/code>, <code>space-between<\/code>, <code>space-evenly<\/code>).<br \/>\n*   <strong><code>alignItems<\/code>:<\/strong> \u00d6\u011felerin \u00e7apraz eksen boyunca nas\u0131l hizalanaca\u011f\u0131n\u0131 belirler (<code>flex-start<\/code>, <code>center<\/code>, <code>flex-end<\/code>, <code>stretch<\/code>, <code>baseline<\/code>).<br \/>\n*   <strong><code>padding<\/code> \/ <code>margin<\/code>:<\/strong> \u0130\u00e7 ve d\u0131\u015f bo\u015fluklar\u0131 ayarlar.<\/p>\n<p>Flexbox&#8217;\u0131 anlamak, React Native&#8217;de duyarl\u0131 ve g\u00fczel tasar\u0131mlar olu\u015fturmak i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<h3>\u00d6zel Bile\u015fenler Olu\u015fturma<\/h3>\n<p>React Native&#8217;in \u00e7ekirdek bile\u015fenleri harika bir ba\u015flang\u0131\u00e7 noktas\u0131 olsa da, \u00e7o\u011fu uygulama i\u00e7in \u00f6zel bile\u015fenler olu\u015fturman\u0131z gerekecektir. \u00d6zel bile\u015fenler, uygulaman\u0131z\u0131n benzersiz UI\/UX gereksinimlerini kar\u015f\u0131laman\u0131za, kod tekrar\u0131n\u0131 azaltman\u0131za ve uygulaman\u0131z\u0131 daha mod\u00fcler hale getirmenize olanak tan\u0131r.<\/p>\n<h4>Neden \u00d6zel Bile\u015fen Olu\u015fturmal\u0131?<\/h4>\n<p>*   <strong>Yeniden Kullan\u0131labilirlik:<\/strong> Bir kez yaz\u0131n, uygulaman\u0131z\u0131n farkl\u0131 yerlerinde veya farkl\u0131 projelerde tekrar kullan\u0131n.<br \/>\n*   <strong>Soyutlama:<\/strong> Karma\u015f\u0131k mant\u0131\u011f\u0131 veya UI par\u00e7alar\u0131n\u0131 tek bir bile\u015fen alt\u0131nda toplayarak ana bile\u015fenlerinizin daha okunabilir olmas\u0131n\u0131 sa\u011flay\u0131n.<br \/>\n*   <strong>Bak\u0131m Kolayl\u0131\u011f\u0131:<\/strong> Bir bile\u015fende yap\u0131lan de\u011fi\u015fiklikler, yaln\u0131zca o bile\u015fenin kendisini etkiler.<br \/>\n*   <strong>Test Edilebilirlik:<\/strong> Daha k\u00fc\u00e7\u00fck, izole bile\u015fenlerin test edilmesi daha kolayd\u0131r.<\/p>\n<h4>Fonksiyonel Bile\u015fenler ve Hooks<\/h4>\n<p>Modern React Native geli\u015ftirmede, fonksiyonel bile\u015fenler ve React Hooks (\u00f6zellikle <code>useState<\/code> ve <code>useEffect<\/code>) tercih edilen yakla\u015f\u0131md\u0131r.<\/p>\n<p>\u00d6rnek: \u00d6zel Bir Buton Bile\u015feni Olu\u015fturma<br \/>\nDiyelim ki uygulaman\u0131zda belirli bir stil ve davran\u0131\u015fa sahip bir\u00e7ok butonunuz var. Bunlar\u0131 her seferinde ba\u015ftan yazmak yerine, \u00f6zel bir <code>MyButton<\/code> bile\u015feni olu\u015fturabiliriz:<\/p>\n<pre><code class=\"language-jsx\">import React from 'react';\nimport { Pressable, Text, StyleSheet } from 'react-native';\n\nconst MyButton = ({ title, onPress, buttonColor, textColor }) => {\n  return (\n    <Pressable\n      onPress={onPress}\n      style={({ pressed }) => [\n        styles.button,\n        { backgroundColor: buttonColor || '#007bff' }, \/\/ Varsay\u0131lan renk\n        pressed && styles.buttonPressed,\n      ]}\n    >\n      <Text style={[styles.buttonText, { color: textColor || 'white' }]}>\n        {title}\n      <\/Text>\n    <\/Pressable>\n  );\n};\n\nconst styles = StyleSheet.create({\n  button: {\n    paddingVertical: 12,\n    paddingHorizontal: 20,\n    borderRadius: 8,\n    alignItems: 'center',\n    justifyContent: 'center',\n    marginVertical: 10,\n    elevation: 2, \/\/ Android i\u00e7in g\u00f6lge\n    shadowColor: '#000', \/\/ iOS i\u00e7in g\u00f6lge\n    shadowOffset: { width: 0, height: 2 },\n    shadowOpacity: 0.25,\n    shadowRadius: 3.84,\n  },\n  buttonPressed: {\n    opacity: 0.8, \/\/ Bas\u0131ld\u0131\u011f\u0131nda opakl\u0131\u011f\u0131 azalt\n  },\n  buttonText: {\n    fontSize: 16,\n    fontWeight: 'bold',\n  },\n});\n\nexport default MyButton;<\/code><\/pre>\n<p>\u015eimdi bu \u00f6zel butonu uygulamam\u0131z\u0131n herhangi bir yerinde kolayca kullanabiliriz:<\/p>\n<pre><code class=\"language-jsx\">import React from 'react';\nimport { View, Alert } from 'react-native';\nimport MyButton from '.\/components\/MyButton'; \/\/ Varsay\u0131lan bir yoldan import ediyoruz\n\nconst App = () => {\n  return (\n    <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>\n      <MyButton\n        title=\"Giri\u015f Yap\"\n        onPress={() => Alert.alert('Giri\u015f Yap\u0131ld\u0131!')}\n        buttonColor=\"green\"\n        textColor=\"white\"\n      \/>\n      <MyButton\n        title=\"Kay\u0131t Ol\"\n        onPress={() => Alert.alert('Kay\u0131t Sayfas\u0131')}\n        buttonColor=\"purple\"\n      \/>\n      <MyButton\n        title=\"\u0130ptal\"\n        onPress={() => Alert.alert('\u0130\u015flem \u0130ptal Edildi')}\n        buttonColor=\"gray\"\n      \/>\n    <\/View>\n  );\n};\n\nexport default App;<\/code><\/pre>\n<p>Bu \u00f6rnek, \u00f6zel bir bile\u015fenin nas\u0131l olu\u015fturuldu\u011funu ve farkl\u0131 props&#8217;lar alarak nas\u0131l \u00f6zelle\u015ftirilebildi\u011fini g\u00f6sterir. Bu yakla\u015f\u0131m, kod taban\u0131n\u0131z\u0131 daha d\u00fczenli ve y\u00f6netilebilir hale getirir.<\/p>\n<h3>En \u0130yi Uygulamalar ve \u0130pu\u00e7lar\u0131<\/h3>\n<p>React Native ile uygulama geli\u015ftirirken, baz\u0131 en iyi uygulamalar\u0131 takip etmek, kodunuzun kalitesini, performans\u0131n\u0131 ve s\u00fcrd\u00fcr\u00fclebilirli\u011fini art\u0131r\u0131r.<\/p>\n<p>*   <strong>Bile\u015fenleri Organize Edin:<\/strong> Bile\u015fenlerinizi mant\u0131ksal olarak klas\u00f6rlere ay\u0131r\u0131n (\u00f6rne\u011fin, <code>components\/<\/code>, <code>screens\/<\/code>, <code>navigation\/<\/code>). Her bile\u015fenin kendi klas\u00f6r\u00fc i\u00e7inde stil dosyas\u0131, test dosyas\u0131 vb. olabilir.<br \/>\n*   <strong>Anlaml\u0131 \u0130simlendirme:<\/strong> Bile\u015fenlerinize ve prop&#8217;lar\u0131n\u0131za anlaml\u0131, a\u00e7\u0131klay\u0131c\u0131 isimler verin.<br \/>\n*   <strong><code>key<\/code> Prop&#8217;unu Kullan\u0131n:<\/strong> <code>FlatList<\/code>, <code>ScrollView<\/code> i\u00e7indeki <code>map<\/code> fonksiyonu gibi listeleri render ederken her \u00f6\u011feye benzersiz bir <code>key<\/code> prop&#8217;u atay\u0131n. Bu, React&#8217;in liste \u00f6\u011felerini verimli bir \u015fekilde g\u00fcncellemesine yard\u0131mc\u0131 olur.<br \/>\n*   <strong>Performans \u0130\u00e7in <code>FlatList<\/code> \/ <code>SectionList<\/code> Kullan\u0131n:<\/strong> Uzun listeler i\u00e7in <code>ScrollView<\/code> yerine her zaman <code>FlatList<\/code> veya <code>SectionList<\/code> tercih edin. Bu bile\u015fenler, yaln\u0131zca g\u00f6r\u00fcn\u00fcrdeki \u00f6\u011feleri render ederek bellek kullan\u0131m\u0131n\u0131 ve render s\u00fcresini optimize eder.<br \/>\n*   <strong>Stilleri Ay\u0131r\u0131n:<\/strong> Inline stiller yerine <code>StyleSheet.create<\/code> kullanarak stilleri ayr\u0131 tutun.<br \/>\n*   <strong>Platforma \u00d6zg\u00fc Kod:<\/strong> <code>Platform<\/code> API&#8217;sini veya <code>.ios.js<\/code> \/ <code>.android.js<\/code> uzant\u0131lar\u0131n\u0131 kullanarak platforma \u00f6zg\u00fc UI veya mant\u0131k uygulay\u0131n.<br \/>\n*   <strong>Yorumlar ve Dok\u00fcmantasyon:<\/strong> Karma\u015f\u0131k bile\u015fenleri veya mant\u0131\u011f\u0131 a\u00e7\u0131klayan yorumlar ekleyin. JSDoc gibi ara\u00e7larla bile\u015fen prop&#8217;lar\u0131n\u0131 belgelemek, \u00f6zellikle b\u00fcy\u00fck ekiplerde \u00e7ok faydal\u0131d\u0131r.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>React Native&#8217;in temel bile\u015fenleri, modern mobil uygulama geli\u015ftirmenin omurgas\u0131n\u0131 olu\u015fturur. <code>View<\/code>, <code>Text<\/code>, <code>Image<\/code>, <code>TextInput<\/code>, <code>Button<\/code>, <code>ScrollView<\/code> ve <code>FlatList<\/code> gibi \u00e7ekirdek bile\u015fenler, uygulaman\u0131z\u0131n g\u00f6rsel aray\u00fcz\u00fcn\u00fc olu\u015fturmak i\u00e7in gerekli temel ara\u00e7lar\u0131 sa\u011flar. Props ve State mekanizmalar\u0131, bu bile\u015fenlerin dinamik ve etkile\u015fimli olmas\u0131n\u0131 sa\u011flarken, Flexbox tabanl\u0131 stil sistemi, duyarl\u0131 ve \u00e7ekici tasar\u0131mlar olu\u015fturman\u0131za olanak tan\u0131r.<\/p>\n<p>\u00d6zel bile\u015fenler olu\u015fturma yetene\u011fi, React Native&#8217;i inan\u0131lmaz derecede g\u00fc\u00e7l\u00fc ve esnek bir \u00e7er\u00e7eve haline getirir. Bu, kod tekrar\u0131n\u0131 \u00f6nlemenize, uygulaman\u0131z\u0131n mimarisini temiz tutman\u0131za ve karma\u015f\u0131k UI&#8217;lar\u0131 y\u00f6netilebilir par\u00e7alara ay\u0131rman\u0131za yard\u0131mc\u0131 olur.<\/p>\n<p>Bu makalede ele al\u0131nan kavramlar\u0131 ve \u00f6rnekleri pratik yaparak peki\u015ftirmek, React Native yolculu\u011funuzda sa\u011flam bir temel olu\u015fturman\u0131z\u0131 sa\u011flayacakt\u0131r. Temel bile\u015fenleri ve onlar\u0131 nas\u0131l kullanaca\u011f\u0131n\u0131z\u0131 anlad\u0131\u011f\u0131n\u0131zda, hayal g\u00fcc\u00fcn\u00fcz\u00fcn s\u0131n\u0131rlar\u0131 dahilinde her t\u00fcrl\u00fc mobil uygulamay\u0131 geli\u015ftirmeye haz\u0131rs\u0131n\u0131z demektir. Unutmay\u0131n, her b\u00fcy\u00fck uygulama, k\u00fc\u00e7\u00fck ve iyi tasarlanm\u0131\u015f bile\u015fenlerin bir araya gelmesiyle ba\u015flar.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"React Native Temel Bile\u015fenlerini \u00d6\u011frenmek: Mobil Uygulama Geli\u015ftirmenin Yap\u0131 Ta\u015flar\u0131\nReact Native, Facebook taraf\u0131ndan geli\u015ftirilen a\u00e7\u0131k k","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[128],"tags":[],"class_list":{"0":"post-34351","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-react","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>React Native Temel Bile\u015fenlerini \u00d6\u011frenmek: Mobil Uygulama Geli\u015ftirmenin Yap\u0131 Ta\u015flar\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/react-native-temel-bilesenlerini-ogrenmek-mobil-uygulama-gelistirmenin-yapi-taslari\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"React Native Temel Bile\u015fenlerini \u00d6\u011frenmek: Mobil Uygulama Geli\u015ftirmenin Yap\u0131 Ta\u015flar\u0131\" \/>\n<meta property=\"og:description\" content=\"React Native Temel Bile\u015fenlerini \u00d6\u011frenmek: Mobil Uygulama Geli\u015ftirmenin Yap\u0131 Ta\u015flar\u0131 React Native, Facebook taraf\u0131ndan geli\u015ftirilen a\u00e7\u0131k k\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/react-native-temel-bilesenlerini-ogrenmek-mobil-uygulama-gelistirmenin-yapi-taslari\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-15T10:40:53+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"17 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/react-native-temel-bilesenlerini-ogrenmek-mobil-uygulama-gelistirmenin-yapi-taslari\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/react-native-temel-bilesenlerini-ogrenmek-mobil-uygulama-gelistirmenin-yapi-taslari\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"React Native Temel Bile\u015fenlerini \u00d6\u011frenmek: Mobil Uygulama Geli\u015ftirmenin Yap\u0131 Ta\u015flar\u0131\",\"datePublished\":\"2025-11-15T10:40:53+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/react-native-temel-bilesenlerini-ogrenmek-mobil-uygulama-gelistirmenin-yapi-taslari\/\"},\"wordCount\":2554,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"React\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/react-native-temel-bilesenlerini-ogrenmek-mobil-uygulama-gelistirmenin-yapi-taslari\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/react-native-temel-bilesenlerini-ogrenmek-mobil-uygulama-gelistirmenin-yapi-taslari\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/react-native-temel-bilesenlerini-ogrenmek-mobil-uygulama-gelistirmenin-yapi-taslari\/\",\"name\":\"React Native Temel Bile\u015fenlerini \u00d6\u011frenmek: Mobil Uygulama Geli\u015ftirmenin Yap\u0131 Ta\u015flar\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-15T10:40:53+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/react-native-temel-bilesenlerini-ogrenmek-mobil-uygulama-gelistirmenin-yapi-taslari\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/react-native-temel-bilesenlerini-ogrenmek-mobil-uygulama-gelistirmenin-yapi-taslari\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/react-native-temel-bilesenlerini-ogrenmek-mobil-uygulama-gelistirmenin-yapi-taslari\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"React Native Temel Bile\u015fenlerini \u00d6\u011frenmek: Mobil Uygulama Geli\u015ftirmenin Yap\u0131 Ta\u015flar\u0131\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"React Native Temel Bile\u015fenlerini \u00d6\u011frenmek: Mobil Uygulama Geli\u015ftirmenin Yap\u0131 Ta\u015flar\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/react-native-temel-bilesenlerini-ogrenmek-mobil-uygulama-gelistirmenin-yapi-taslari\/","og_locale":"tr_TR","og_type":"article","og_title":"React Native Temel Bile\u015fenlerini \u00d6\u011frenmek: Mobil Uygulama Geli\u015ftirmenin Yap\u0131 Ta\u015flar\u0131","og_description":"React Native Temel Bile\u015fenlerini \u00d6\u011frenmek: Mobil Uygulama Geli\u015ftirmenin Yap\u0131 Ta\u015flar\u0131 React Native, Facebook taraf\u0131ndan geli\u015ftirilen a\u00e7\u0131k k","og_url":"https:\/\/fatihsoysal.com\/blog\/react-native-temel-bilesenlerini-ogrenmek-mobil-uygulama-gelistirmenin-yapi-taslari\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-15T10:40:53+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"17 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/react-native-temel-bilesenlerini-ogrenmek-mobil-uygulama-gelistirmenin-yapi-taslari\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/react-native-temel-bilesenlerini-ogrenmek-mobil-uygulama-gelistirmenin-yapi-taslari\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"React Native Temel Bile\u015fenlerini \u00d6\u011frenmek: Mobil Uygulama Geli\u015ftirmenin Yap\u0131 Ta\u015flar\u0131","datePublished":"2025-11-15T10:40:53+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/react-native-temel-bilesenlerini-ogrenmek-mobil-uygulama-gelistirmenin-yapi-taslari\/"},"wordCount":2554,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["React"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/react-native-temel-bilesenlerini-ogrenmek-mobil-uygulama-gelistirmenin-yapi-taslari\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/react-native-temel-bilesenlerini-ogrenmek-mobil-uygulama-gelistirmenin-yapi-taslari\/","url":"https:\/\/fatihsoysal.com\/blog\/react-native-temel-bilesenlerini-ogrenmek-mobil-uygulama-gelistirmenin-yapi-taslari\/","name":"React Native Temel Bile\u015fenlerini \u00d6\u011frenmek: Mobil Uygulama Geli\u015ftirmenin Yap\u0131 Ta\u015flar\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-15T10:40:53+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/react-native-temel-bilesenlerini-ogrenmek-mobil-uygulama-gelistirmenin-yapi-taslari\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/react-native-temel-bilesenlerini-ogrenmek-mobil-uygulama-gelistirmenin-yapi-taslari\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/react-native-temel-bilesenlerini-ogrenmek-mobil-uygulama-gelistirmenin-yapi-taslari\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"React Native Temel Bile\u015fenlerini \u00d6\u011frenmek: Mobil Uygulama Geli\u015ftirmenin Yap\u0131 Ta\u015flar\u0131"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34351","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=34351"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34351\/revisions"}],"predecessor-version":[{"id":34352,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34351\/revisions\/34352"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=34351"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=34351"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=34351"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}