{"id":40220,"date":"2026-02-25T12:41:08","date_gmt":"2026-02-25T09:41:08","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=40220"},"modified":"2026-02-25T12:41:08","modified_gmt":"2026-02-25T09:41:08","slug":"react-ile-baslangic-modern-web-uygulamalari-gelistirmeye-adim-adim-giris","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/react-ile-baslangic-modern-web-uygulamalari-gelistirmeye-adim-adim-giris\/","title":{"rendered":"React ile Ba\u015flang\u0131\u00e7: Modern Web Uygulamalar\u0131 Geli\u015ftirmeye Ad\u0131m Ad\u0131m Giri\u015f"},"content":{"rendered":"<p><body><\/p>\n<h2>React ile Ba\u015flang\u0131\u00e7: Modern Web Uygulamalar\u0131 Geli\u015ftirmeye Ad\u0131m Ad\u0131m Giri\u015f<\/h2>\n<p>React, modern web geli\u015ftirme d\u00fcnyas\u0131nda en pop\u00fcler ve g\u00fc\u00e7l\u00fc JavaScript k\u00fct\u00fcphanelerinden biridir. Facebook taraf\u0131ndan geli\u015ftirilen ve a\u00e7\u0131k kaynak olarak sunulan React, \u00f6zellikle b\u00fcy\u00fck ve karma\u015f\u0131k kullan\u0131c\u0131 aray\u00fczleri (UI) olu\u015fturmak i\u00e7in tasarlanm\u0131\u015ft\u0131r. Geli\u015ftiricilere bildirimsel, bile\u015fen tabanl\u0131 bir yakla\u015f\u0131m sunarak, etkile\u015fimli ve dinamik web uygulamalar\u0131 geli\u015ftirmeyi kolayla\u015ft\u0131r\u0131r. Bu kapsaml\u0131 makale, React&#8217;e yeni ba\u015flayanlar i\u00e7in temel kavramlardan ileri d\u00fczey konulara kadar ad\u0131m ad\u0131m bir rehber sunmay\u0131 ama\u00e7lamaktad\u0131r. React&#8217;in ne oldu\u011funu, neden bu kadar pop\u00fcler oldu\u011funu, geli\u015ftirme ortam\u0131n\u0131z\u0131 nas\u0131l kuraca\u011f\u0131n\u0131z\u0131, temel bile\u015fenleri, durumu (state), \u00f6zellikleri (props) ve Hook&#8217;lar\u0131 nas\u0131l kullanaca\u011f\u0131n\u0131z\u0131, ayr\u0131ca pratik geli\u015ftirme ipu\u00e7lar\u0131n\u0131 ve ekosistemdeki bir sonraki ad\u0131mlar\u0131 detayl\u0131 bir \u015fekilde inceleyece\u011fiz.<\/p>\n<p>React \u00f6\u011frenmek, g\u00fcn\u00fcm\u00fcz web geli\u015ftirme pazar\u0131nda kendinizi konumland\u0131rmak i\u00e7in \u00f6nemli bir yetkinliktir. \u0130ster kariyerine yeni ba\u015flayan bir geli\u015ftirici olun ister mevcut becerilerinizi geni\u015fletmek isteyen deneyimli bir profesyonel, React&#8217;in sundu\u011fu olanaklar modern ve performansl\u0131 uygulamalar yaratman\u0131z i\u00e7in size kap\u0131lar a\u00e7acakt\u0131r. Bu rehberin sonunda, kendi React uygulaman\u0131z\u0131 geli\u015ftirmeye ba\u015flayacak ve bu heyecan verici k\u00fct\u00fcphanenin temel prensiplerini kavram\u0131\u015f olacaks\u0131n\u0131z.<\/p>\n<h3>React Nedir ve Neden \u00d6nemlidir?<\/h3>\n<p>React, kullan\u0131c\u0131 aray\u00fczleri olu\u015fturmak i\u00e7in kullan\u0131lan bir JavaScript k\u00fct\u00fcphanesidir. Bir &#8220;framework&#8221; de\u011fil, daha \u00e7ok bir &#8220;k\u00fct\u00fcphane&#8221; olarak adland\u0131r\u0131l\u0131r \u00e7\u00fcnk\u00fc genellikle sadece UI katman\u0131na odaklan\u0131r ve routing, state y\u00f6netimi gibi di\u011fer i\u015flevler i\u00e7in ek k\u00fct\u00fcphanelerle birlikte kullan\u0131l\u0131r. Ancak, geni\u015f ekosistemi ve yayg\u0131n kullan\u0131m\u0131 nedeniyle \u00e7o\u011fu zaman bir framework gibi alg\u0131lan\u0131r.<\/p>\n<p>React&#8217;in temel \u00f6zellikleri ve avantajlar\u0131 \u015funlard\u0131r:<\/p>\n<h4>Bildirimsel (Declarative) Yakla\u015f\u0131m<\/h4>\n<p>React, kullan\u0131c\u0131 aray\u00fczlerini bildirimsel bir \u015fekilde tan\u0131mlaman\u0131za olanak tan\u0131r. Bu, uygulaman\u0131z\u0131n belirli bir anda nas\u0131l g\u00f6r\u00fcnmesi gerekti\u011fini belirtmeniz anlam\u0131na gelir, React ise DOM&#8217;u bu duruma getirmek i\u00e7in gerekli t\u00fcm g\u00fcncellemeleri otomatik olarak halleder. Geleneksel imperatif yakla\u015f\u0131mlarda oldu\u011fu gibi ad\u0131m ad\u0131m DOM manip\u00fclasyonu yapmak yerine, uygulaman\u0131z\u0131n durumunu tan\u0131mlars\u0131n\u0131z ve React bu durumu UI&#8217;a yans\u0131t\u0131r. Bu, kodunuzu daha \u00f6ng\u00f6r\u00fclebilir ve hata ay\u0131klamay\u0131 daha kolay hale getirir.<\/p>\n<h4>Bile\u015fen Tabanl\u0131 (Component-Based) Mimari<\/h4>\n<p>React&#8217;in kalbinde bile\u015fenler (components) bulunur. Her React uygulamas\u0131, k\u00fc\u00e7\u00fck, ba\u011f\u0131ms\u0131z ve yeniden kullan\u0131labilir bile\u015fenlerden olu\u015fur. Bu bile\u015fenler, kendi mant\u0131klar\u0131n\u0131 ve g\u00f6r\u00fcn\u00fcmlerini kaps\u00fcller. \u00d6rne\u011fin, bir <code>Button<\/code> bile\u015feni, bir <code>Navbar<\/code> bile\u015feni veya bir <code>ProductCard<\/code> bile\u015feni olu\u015fturabilirsiniz. Bu mod\u00fcler yap\u0131, kodun yeniden kullan\u0131labilirli\u011fini art\u0131r\u0131r, bak\u0131m\u0131 kolayla\u015ft\u0131r\u0131r ve b\u00fcy\u00fck projelerde geli\u015ftirme s\u00fcrecini h\u0131zland\u0131r\u0131r. Bile\u015fenler bir araya gelerek daha karma\u015f\u0131k UI&#8217;lar olu\u015fturur.<\/p>\n<h4>Sanal DOM (Virtual DOM)<\/h4>\n<p>Performans, modern web uygulamalar\u0131 i\u00e7in kritik \u00f6neme sahiptir. React, bu sorunu Sanal DOM (Virtual DOM) ad\u0131 verilen bir mekanizma ile \u00e7\u00f6zer. Sanal DOM, ger\u00e7ek DOM&#8217;un hafif bir kopyas\u0131d\u0131r ve bellekte tutulur. Bir bile\u015fenin durumu de\u011fi\u015fti\u011finde, React \u00f6nce Sanal DOM&#8217;u g\u00fcnceller. Ard\u0131ndan, g\u00fcncellenmi\u015f Sanal DOM&#8217;u \u00f6nceki haliyle kar\u015f\u0131la\u015ft\u0131r\u0131r ve yaln\u0131zca ger\u00e7ek DOM&#8217;da de\u011fi\u015fen k\u0131s\u0131mlar\u0131 minimum d\u00fczeyde ve en verimli \u015fekilde g\u00fcnceller. Bu &#8220;diffing&#8221; ve &#8220;reconciliation&#8221; s\u00fcreci, do\u011frudan DOM manip\u00fclasyonundan \u00e7ok daha h\u0131zl\u0131d\u0131r ve uygulama performans\u0131n\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131r.<\/p>\n<h4>Tek Y\u00f6nl\u00fc Veri Ak\u0131\u015f\u0131<\/h4>\n<p>React&#8217;te veri ak\u0131\u015f\u0131 genellikle tek y\u00f6nl\u00fcd\u00fcr (&#8220;top-down&#8221;). Ebeveyn bile\u015fenler, alt bile\u015fenlere &#8220;props&#8221; (\u00f6zellikler) arac\u0131l\u0131\u011f\u0131yla veri iletir. Bu, verilerin nas\u0131l de\u011fi\u015fti\u011fini ve uygulaman\u0131zda nerede kullan\u0131ld\u0131\u011f\u0131n\u0131 takip etmeyi kolayla\u015ft\u0131r\u0131r, b\u00f6ylece hatalar\u0131 bulmak ve gidermek daha basit hale gelir. Durum g\u00fcncellemeleri genellikle bir bile\u015fenin kendi i\u00e7inde veya bir \u00fcst bile\u015fen taraf\u0131ndan tetiklenir ve bu g\u00fcncellemeler alt bile\u015fenlere yay\u0131l\u0131r.<\/p>\n<h4>Geni\u015f Ekosistem ve Topluluk Deste\u011fi<\/h4>\n<p>React, d\u00fcnyan\u0131n en b\u00fcy\u00fck ve en aktif geli\u015ftirici topluluklar\u0131ndan birine sahiptir. Bu, bol miktarda dok\u00fcmantasyon, \u00f6\u011fretici, \u00fc\u00e7\u00fcnc\u00fc taraf k\u00fct\u00fcphane ve ara\u00e7 oldu\u011fu anlam\u0131na gelir. Bir sorunla kar\u015f\u0131la\u015ft\u0131\u011f\u0131n\u0131zda, b\u00fcy\u00fck olas\u0131l\u0131kla \u00e7\u00f6z\u00fcm\u00fc zaten internette bulabilirsiniz. Ayr\u0131ca, React Router (routing i\u00e7in), Redux (state y\u00f6netimi i\u00e7in), Next.js (sunucu taraf\u0131 renderlama i\u00e7in) gibi bir\u00e7ok tamamlay\u0131c\u0131 k\u00fct\u00fcphane ve ara\u00e7, React&#8217;in yeteneklerini geni\u015fletir ve geli\u015ftiricilere kapsaml\u0131 bir \u00e7\u00f6z\u00fcm sunar.<\/p>\n<p>Bu nedenlerden dolay\u0131 React, Facebook, Instagram, Netflix, Airbnb gibi bir\u00e7ok b\u00fcy\u00fck \u015firketin tercih etti\u011fi bir teknolojidir ve modern web geli\u015ftirme d\u00fcnyas\u0131nda vazge\u00e7ilmez bir ara\u00e7 haline gelmi\u015ftir.<\/p>\n<h3>React Geli\u015ftirme Ortam\u0131n\u0131 Kurma<\/h3>\n<p>React ile \u00e7al\u0131\u015fmaya ba\u015flamadan \u00f6nce, gerekli ara\u00e7lar\u0131 bilgisayar\u0131n\u0131za kurman\u0131z ve bir geli\u015ftirme ortam\u0131 olu\u015fturman\u0131z gerekir. Bu s\u00fcre\u00e7, genellikle olduk\u00e7a basittir.<\/p>\n<h4>\u00d6nko\u015fullar<\/h4>\n<p>React uygulamalar\u0131 geli\u015ftirmek i\u00e7in birka\u00e7 temel araca ihtiyac\u0131n\u0131z olacak:<\/p>\n<p>*   <strong>Node.js ve npm\/yarn:<\/strong> React uygulamalar\u0131 JavaScript ile yaz\u0131l\u0131r ve Node.js \u00e7al\u0131\u015fma zaman\u0131 ortam\u0131n\u0131 gerektirir. Node.js&#8217;i y\u00fckledi\u011finizde, npm (Node Package Manager) de otomatik olarak kurulur. Alternatif olarak, <code>yarn<\/code> paket y\u00f6neticisini de kullanabilirsiniz, ki bu bazen daha h\u0131zl\u0131 olabilir. Node.js&#8217;i resmi web sitesinden (nodejs.org) indirip kurabilirsiniz. Kurulumdan sonra terminalinizde <code>node -v<\/code> ve <code>npm -v<\/code> (veya <code>yarn -v<\/code>) komutlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rarak do\u011fru \u015fekilde kurulup kurulmad\u0131\u011f\u0131n\u0131 kontrol edebilirsiniz.<br \/>\n*   <strong>Metin D\u00fczenleyici\/IDE:<\/strong> Kod yazmak i\u00e7in bir metin d\u00fczenleyiciye ihtiyac\u0131n\u0131z olacak. Visual Studio Code (VS Code), React geli\u015ftiricileri aras\u0131nda en pop\u00fcler se\u00e7eneklerden biridir. Geni\u015f eklenti deste\u011fi, ak\u0131ll\u0131 kod tamamlama, hata ay\u0131klama \u00f6zellikleri ve entegre terminali ile harika bir geli\u015ftirme deneyimi sunar. Di\u011fer pop\u00fcler se\u00e7enekler aras\u0131nda WebStorm ve Sublime Text bulunur.<br \/>\n*   <strong>Modern Web Taray\u0131c\u0131s\u0131:<\/strong> Uygulaman\u0131z\u0131 \u00e7al\u0131\u015ft\u0131rmak ve hata ay\u0131klamak i\u00e7in Chrome, Firefox veya Edge gibi modern bir web taray\u0131c\u0131s\u0131na ihtiyac\u0131n\u0131z olacak. Bu taray\u0131c\u0131lar\u0131n geli\u015ftirici ara\u00e7lar\u0131 (Developer Tools) React uygulamalar\u0131n\u0131 incelemek ve hata ay\u0131klamak i\u00e7in vazge\u00e7ilmezdir.<\/p>\n<h4>Proje Olu\u015fturma Y\u00f6ntemleri<\/h4>\n<p>React projesi olu\u015fturman\u0131n birka\u00e7 yolu vard\u0131r. Yeni ba\u015flayanlar i\u00e7in en uygun olan <code>create-react-app<\/code> veya <code>Vite<\/code>&#8216;dir.<\/p>\n<h5>Create React App (CRA)<\/h5>\n<p><code>create-react-app<\/code>, React ekibi taraf\u0131ndan desteklenen ve tek bir komutla tam yap\u0131land\u0131r\u0131lm\u0131\u015f bir React geli\u015ftirme ortam\u0131 olu\u015fturan resmi bir ara\u00e7t\u0131r. Webpack, Babel gibi ara\u00e7lar\u0131 sizin i\u00e7in yap\u0131land\u0131r\u0131r, b\u00f6ylece hemen kod yazmaya ba\u015flayabilirsiniz.<\/p>\n<p><strong>Kurulum ve \u0130lk \u00c7al\u0131\u015ft\u0131rma:<\/strong><br \/>\nTerminalinizi a\u00e7\u0131n ve a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-bash\">npx create-react-app my-react-app\ncd my-react-app\nnpm start<\/code><\/pre>\n<p>*   <code>npx create-react-app my-react-app<\/code>: Bu komut, <code>my-react-app<\/code> ad\u0131nda yeni bir React projesi olu\u015fturur. <code>npx<\/code>, <code>npm<\/code> ile birlikte gelen bir ara\u00e7t\u0131r ve paketleri yerel olarak y\u00fcklemeden \u00e7al\u0131\u015ft\u0131rman\u0131za olanak tan\u0131r.<br \/>\n*   <code>cd my-react-app<\/code>: Proje dizinine ge\u00e7i\u015f yapar.<br \/>\n*   <code>npm start<\/code>: Geli\u015ftirme sunucusunu ba\u015flat\u0131r. Bu komutu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda, uygulaman\u0131z genellikle <code>http:\/\/localhost:3000<\/code> adresinde otomatik olarak taray\u0131c\u0131n\u0131zda a\u00e7\u0131lacakt\u0131r. Kodunuzda yapt\u0131\u011f\u0131n\u0131z de\u011fi\u015fiklikler kaydedildi\u011finde, taray\u0131c\u0131 sayfa yenilemeye gerek kalmadan otomatik olarak g\u00fcncellenecektir (hot reloading).<\/p>\n<p><strong>Proje Yap\u0131s\u0131:<\/strong><br \/>\n<code>create-react-app<\/code> ile olu\u015fturulan tipik bir React projesi \u015fu dizin yap\u0131s\u0131na sahiptir:<\/p>\n<p>*   <strong><code>node_modules\/<\/code><\/strong>: Projenizin ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 i\u00e7eren klas\u00f6r. Bu klas\u00f6r\u00fc manuel olarak de\u011fi\u015ftirmemelisiniz.<br \/>\n*   <strong><code>public\/<\/code><\/strong>: Statik dosyalar\u0131 (HTML, resimler, manifest dosyas\u0131 vb.) i\u00e7erir. <code>index.html<\/code> ana HTML dosyan\u0131zd\u0131r ve React uygulaman\u0131z buraya enjekte edilir.<br \/>\n*   <strong><code>src\/<\/code><\/strong>: React uygulaman\u0131z\u0131n ana kodunu i\u00e7eren klas\u00f6r. T\u00fcm bile\u015fenleriniz, stil dosyalar\u0131n\u0131z ve JavaScript mant\u0131\u011f\u0131n\u0131z burada bulunur.<br \/>\n    *   <code>index.js<\/code>: Uygulaman\u0131z\u0131n ba\u015flang\u0131\u00e7 noktas\u0131d\u0131r. React uygulaman\u0131z\u0131 DOM&#8217;a ba\u011flar.<br \/>\n    *   <code>App.js<\/code>: Ana uygulama bile\u015feninizdir. Uygulaman\u0131z\u0131n iskeletini olu\u015fturur.<br \/>\n    *   <code>App.css<\/code>, <code>index.css<\/code>: Stil dosyalar\u0131.<br \/>\n    *   <code>logo.svg<\/code>: Varsay\u0131lan logo.<br \/>\n*   <strong><code>package.json<\/code><\/strong>: Projenizin meta verilerini (ad\u0131, s\u00fcr\u00fcm\u00fc), ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 ve komut dosyalar\u0131n\u0131 (scripts) tan\u0131mlar.<br \/>\n*   <strong><code>README.md<\/code><\/strong>: Projeniz hakk\u0131nda bilgi i\u00e7eren dosya.<\/p>\n<h5>Vite (Alternatif)<\/h5>\n<p>Son zamanlarda <code>create-react-app<\/code>&#8216;e h\u0131zl\u0131 bir alternatif olarak <code>Vite<\/code> (Frans\u0131zca &#8220;h\u0131zl\u0131&#8221; anlam\u0131na gelir) pop\u00fclerlik kazanm\u0131\u015ft\u0131r. Geli\u015ftirme sunucusunu ve \u00fcretim derlemelerini \u00e7ok daha h\u0131zl\u0131 ba\u015flatmas\u0131yla bilinir. B\u00fcy\u00fck projelerde veya daha modern bir derleme deneyimi arayanlar i\u00e7in harika bir se\u00e7enektir.<\/p>\n<p><strong>Kurulum ve \u0130lk \u00c7al\u0131\u015ft\u0131rma:<\/strong><\/p>\n<pre><code class=\"language-bash\">npm create vite@latest my-react-app -- --template react\ncd my-react-app\nnpm install\nnpm run dev<\/code><\/pre>\n<p>Vite de benzer bir proje yap\u0131s\u0131 sunar ancak daha minimalisttir ve <code>index.html<\/code> dosyas\u0131n\u0131 <code>public<\/code> yerine do\u011frudan proje k\u00f6k\u00fcnde tutar.<\/p>\n<p>Yeni ba\u015flayanlar i\u00e7in <code>create-react-app<\/code> genellikle yeterlidir, ancak h\u0131z ve modern ara\u00e7lara a\u015final\u0131k kazanmak isterseniz Vite&#8217;yi de deneyebilirsiniz.<\/p>\n<h3>React&#8217;in Temel Kavramlar\u0131<\/h3>\n<p>React&#8217;in g\u00fcc\u00fcn\u00fc anlamak i\u00e7in, temel yap\u0131 ta\u015flar\u0131n\u0131 ve \u00e7al\u0131\u015fma prensiplerini iyi kavramak \u00f6nemlidir.<\/p>\n<h4>Bile\u015fenler (Components)<\/h4>\n<p>Daha \u00f6nce de belirtildi\u011fi gibi, bile\u015fenler React uygulamalar\u0131n\u0131n temel yap\u0131 ta\u015flar\u0131d\u0131r. Bir bile\u015fen, kendi ba\u015f\u0131na bir UI par\u00e7as\u0131n\u0131 temsil eden ve kendi mant\u0131\u011f\u0131na, durumuna (state) ve g\u00f6r\u00fcn\u00fcm\u00fcne sahip olan ba\u011f\u0131ms\u0131z, yeniden kullan\u0131labilir bir kod blo\u011fudur. React&#8217;te iki t\u00fcr bile\u015fen vard\u0131r:<\/p>\n<p>*   <strong>Fonksiyonel Bile\u015fenler (Functional Components):<\/strong> Modern React&#8217;in odak noktas\u0131d\u0131r ve genellikle tercih edilirler. Bunlar, JavaScript fonksiyonlar\u0131d\u0131r ve React Hook&#8217;lar\u0131 sayesinde durum (state) ve ya\u015fam d\u00f6ng\u00fcs\u00fc \u00f6zellikleri gibi yeteneklere sahip olabilirler. Bir fonksiyonel bile\u015fen, kendisine gelen <code>props<\/code>&#8216;lar\u0131 al\u0131r ve bir JSX (JavaScript XML) d\u00f6nd\u00fcr\u00fcr.<\/p>\n<pre><code class=\"language-jsx\">import React from 'react';\n\n    function Selamlama(props) {\n      return ;\n    }\n\n    \/\/ Kullan\u0131m\u0131\n    \/\/ <Selamlama ad=\"D\u00fcnya\" \/><\/code><\/pre>\n<p>*   <strong>S\u0131n\u0131f Bile\u015fenleri (Class Components):<\/strong> Daha eski React versiyonlar\u0131nda yayg\u0131n olarak kullan\u0131l\u0131rlard\u0131. <code>React.Component<\/code> s\u0131n\u0131f\u0131ndan miras al\u0131rlar ve <code>render()<\/code> metodu i\u00e7inde JSX d\u00f6nd\u00fcr\u00fcrler. Durum (state) ve ya\u015fam d\u00f6ng\u00fcs\u00fc metotlar\u0131na sahiptirler. React Hook&#8217;lar\u0131n\u0131n ortaya \u00e7\u0131kmas\u0131yla birlikte, s\u0131n\u0131f bile\u015fenleri yeni projelerde daha az tercih edilmektedir.<\/p>\n<pre><code class=\"language-jsx\">import React, { Component } from 'react';\n\n    class SelamlamaSinif extends Component {\n      render() {\n        return ;\n      }\n    }\n\n    \/\/ Kullan\u0131m\u0131\n    \/\/ <SelamlamaSinif ad=\"React\" \/><\/code><\/pre>\n<p>Bu makalede, modern React geli\u015ftirme prati\u011fine uygun olarak \u00e7o\u011funlukla fonksiyonel bile\u015fenlere odaklanaca\u011f\u0131z.<\/p>\n<h4>JSX Nedir?<\/h4>\n<p>JSX (JavaScript XML), React ile kullan\u0131c\u0131 aray\u00fczlerini tan\u0131mlamak i\u00e7in kullan\u0131lan bir s\u00f6zdizimi uzant\u0131s\u0131d\u0131r. JavaScript kodu i\u00e7inde HTML benzeri etiketler yazman\u0131za olanak tan\u0131r. JSX, taray\u0131c\u0131lar taraf\u0131ndan do\u011frudan anla\u015f\u0131lamaz; Babel gibi bir derleyici taraf\u0131ndan standart JavaScript&#8217;e d\u00f6n\u00fc\u015ft\u00fcr\u00fcl\u00fcr.<\/p>\n<p><strong>Neden JSX?<\/strong><br \/>\n*   <strong>Okunabilirlik:<\/strong> HTML&#8217;e benzer yap\u0131s\u0131 sayesinde, UI&#8217;\u0131n nas\u0131l g\u00f6r\u00fcnece\u011fini anlamak daha kolayd\u0131r.<br \/>\n*   <strong>Tan\u0131d\u0131k Yap\u0131:<\/strong> Web geli\u015ftiricileri i\u00e7in HTML&#8217;e benzerli\u011fi sayesinde \u00f6\u011frenmesi kolayd\u0131r.<br \/>\n*   <strong>G\u00fc\u00e7l\u00fc JavaScript Entegrasyonu:<\/strong> JavaScript ifadelerini <code>{}<\/code> s\u00fcsl\u00fc parantezler i\u00e7inde do\u011frudan JSX i\u00e7ine g\u00f6mebilirsiniz. Bu, dinamik i\u00e7erik olu\u015fturmay\u0131 ve ko\u015fullu renderlama gibi i\u015flemleri kolayla\u015ft\u0131r\u0131r.<\/p>\n<p><strong>JSX Kurallar\u0131:<\/strong><br \/>\n*   <strong>Tek K\u00f6k Element:<\/strong> Her JSX ifadesi, tek bir k\u00f6k element d\u00f6nd\u00fcrmelidir. Birden fazla element d\u00f6nd\u00fcrmeniz gerekiyorsa, bunlar\u0131 bir <code>div<\/code> veya React&#8217;in <code>Fragment<\/code>&#8216;\u0131 (<code><>...<\/><\/code>) i\u00e7ine almal\u0131s\u0131n\u0131z.<\/p>\n<pre><code class=\"language-jsx\">\/\/ Hatal\u0131\n    \/\/ return (\n    \/\/   \n    \/\/   <p>Paragraf<\/p>\n    \/\/ );\n\n    \/\/ Do\u011fru\n    return (\n      <div>\n        \n        <p>Paragraf<\/p>\n      <\/div>\n    );\n\n    \/\/ Veya Fragment ile\n    return (\n      <>\n        \n        <p>Paragraf<\/p>\n      <\/>\n    );<\/code><\/pre>\n<p>*   <strong>camelCase \u00d6zellikler:<\/strong> HTML&#8217;deki <code>class<\/code> veya <code>for<\/code> gibi baz\u0131 \u00f6zellikler JavaScript&#8217;te \u00f6zel anlamlara sahip oldu\u011fu i\u00e7in JSX&#8217;te <code>className<\/code> ve <code>htmlFor<\/code> gibi camelCase isimlerle kullan\u0131l\u0131r. Stil \u00f6zelliklerini de JavaScript nesneleri olarak camelCase ile yazars\u0131n\u0131z: <code><\/p>\n<div style={{ backgroundColor: &#039;blue&#039;, fontSize: &#039;16px&#039; }}><\/div>\n<p><\/code>.<br \/>\n*   <strong>JavaScript \u0130fadeleri:<\/strong> JSX i\u00e7inde JavaScript ifadelerini kullanmak i\u00e7in s\u00fcsl\u00fc parantezler (<code>{}<\/code>) kullan\u0131n.<\/p>\n<pre><code class=\"language-jsx\">const ad = \"Alice\";\n    const sayi = 5;\n\n    function topla(a, b) {\n      return a + b;\n    }\n\n    return (\n      <div>\n        <p>Merhaba, {ad}!<\/p>\n        <p>5 + 3 = {topla(5, 3)}<\/p>\n        <p>Say\u0131 {sayi % 2 === 0 ? \"\u00e7ift\" : \"tek\"}.<\/p>\n      <\/div>\n    );<\/code><\/pre>\n<h4>Props (Properties)<\/h4>\n<p>Props, React bile\u015fenleri aras\u0131nda veri aktar\u0131m\u0131 yapmak i\u00e7in kullan\u0131lan mekanizmad\u0131r. &#8220;Properties&#8221; kelimesinin k\u0131saltmas\u0131d\u0131r ve ebeveyn bile\u015fenlerden alt bile\u015fenlere veri iletmek i\u00e7in kullan\u0131l\u0131r. Props&#8217;lar, bir bile\u015fene d\u0131\u015far\u0131dan gelen ve bile\u015fen taraf\u0131ndan de\u011fi\u015ftirilemeyen (immutable) verilerdir. Bu, React&#8217;in tek y\u00f6nl\u00fc veri ak\u0131\u015f\u0131 prensibinin temelini olu\u015fturur.<\/p>\n<pre><code class=\"language-jsx\">import React from 'react';\n\nfunction KullaniciKarti(props) {\n  return (\n    <div>\n      <h2>{props.isim}<\/h2>\n      <p>Ya\u015f: {props.yas}<\/p>\n      <p>Meslek: {props.meslek}<\/p>\n    <\/div>\n  );\n}\n\nfunction Uygulama() {\n  return (\n    <div>\n      <KullaniciKarti isim=\"Ay\u015fe Y\u0131lmaz\" yas={30} meslek=\"Yaz\u0131l\u0131mc\u0131\" \/>\n      <KullaniciKarti isim=\"Mehmet Can\" yas={25} meslek=\"Tasar\u0131mc\u0131\" \/>\n    <\/div>\n  );\n}\n\nexport default Uygulama;<\/code><\/pre>\n<p>Yukar\u0131daki \u00f6rnekte, <code>Uygulama<\/code> bile\u015feni <code>KullaniciKarti<\/code> bile\u015fenine <code>isim<\/code>, <code>yas<\/code> ve <code>meslek<\/code> prop&#8217;lar\u0131n\u0131 iletiyor. <code>KullaniciKarti<\/code> bile\u015feni bu prop&#8217;lar\u0131 kendi i\u00e7inde kullanarak i\u00e7eri\u011fini olu\u015fturuyor.<\/p>\n<p><strong>Destructuring ile Props Kullan\u0131m\u0131:<\/strong><br \/>\nFonksiyonel bile\u015fenlerde props&#8217;lar\u0131 do\u011frudan fonksiyon parametresi olarak destructuring (yap\u0131 bozma) ile almak yayg\u0131n ve daha okunakl\u0131 bir y\u00f6ntemdir:<\/p>\n<pre><code class=\"language-jsx\">function KullaniciKarti({ isim, yas, meslek }) { \/\/ props yerine do\u011frudan isim, yas, meslek\n  return (\n    <div>\n      <h2>{isim}<\/h2>\n      <p>Ya\u015f: {yas}<\/p>\n      <p>Meslek: {meslek}<\/p>\n    <\/div>\n  );\n}<\/code><\/pre>\n<p><strong><code>children<\/code> prop&#8217;u:<\/strong><br \/>\nBaz\u0131 durumlarda, bir bile\u015fenin a\u00e7\u0131l\u0131\u015f ve kapan\u0131\u015f etiketleri aras\u0131na i\u00e7erik yerle\u015ftirmek isteyebilirsiniz. Bu i\u00e7erik, bile\u015fenin <code>children<\/code> prop&#8217;u olarak otomatik olarak iletilir.<\/p>\n<pre><code class=\"language-jsx\">function Kutu({ children }) {\n  return (\n    <div style={{ border: '1px solid black', padding: '10px' }}>\n      {children}\n    <\/div>\n  );\n}\n\nfunction Uygulama() {\n  return (\n    <Kutu>\n      \n      <p>Bu kutunun i\u00e7indeki bir paragraf.<\/p>\n    <\/Kutu>\n  );\n}<\/code><\/pre>\n<h4>State (Durum)<\/h4>\n<p>State (durum), bir bile\u015fenin zamanla de\u011fi\u015febilen ve bile\u015fenin kendi i\u00e7inde y\u00f6netti\u011fi verilerdir. Kullan\u0131c\u0131 etkile\u015fimleri (t\u0131klamalar, form giri\u015fleri), a\u011f istekleri veya zamanlay\u0131c\u0131lar gibi olaylar sonucunda durum de\u011fi\u015febilir. Durum de\u011fi\u015fti\u011finde, React bile\u015feni yeniden render eder ve UI&#8217;\u0131 g\u00fcnceller.<\/p>\n<p>Fonksiyonel bile\u015fenlerde durumu y\u00f6netmek i\u00e7in <code>useState<\/code> Hook&#8217;u kullan\u0131l\u0131r.<\/p>\n<p><strong><code>useState<\/code> Hook&#8217;u:<\/strong><br \/>\n<code>useState<\/code> Hook&#8217;u, fonksiyonel bile\u015fenlere durum eklemenin yoludur. \u0130ki elemanl\u0131 bir dizi d\u00f6nd\u00fcr\u00fcr: mevcut durum de\u011feri ve bu durumu g\u00fcncelleyen bir fonksiyon.<\/p>\n<pre><code class=\"language-jsx\">import React, { useState } from 'react';\n\nfunction Sayac() {\n  \/\/ <code>sayac<\/code> mevcut durum de\u011feri, <code>setSayac<\/code> durumu g\u00fcncelleyen fonksiyon\n  \/\/ Ba\u015flang\u0131\u00e7 de\u011feri 0\n  const [sayac, setSayac] = useState(0);\n\n  const artir = () => {\n    setSayac(sayac + 1); \/\/ Durumu g\u00fcncelle\n  };\n\n  const azalt = () => {\n    setSayac(sayac - 1);\n  };\n\n  return (\n    <div>\n      <p>Mevcut Say\u0131: {sayac}<\/p>\n      <button onClick={artir}>Art\u0131r<\/button>\n      <button onClick={azalt}>Azalt<\/button>\n    <\/div>\n  );\n}\n\nexport default Sayac;<\/code><\/pre>\n<p>Yukar\u0131daki \u00f6rnekte, <code>Sayac<\/code> bile\u015feni kendi <code>sayac<\/code> durumunu y\u00f6netir. <code>artir<\/code> veya <code>azalt<\/code> butonlar\u0131na t\u0131kland\u0131\u011f\u0131nda, <code>setSayac<\/code> fonksiyonu \u00e7a\u011fr\u0131larak durum g\u00fcncellenir. React, durum de\u011fi\u015fti\u011finde <code>Sayac<\/code> bile\u015fenini otomatik olarak yeniden render eder ve ekranda g\u00fcncel say\u0131y\u0131 g\u00f6sterir.<\/p>\n<p><strong>Durum G\u00fcncelleme Kurallar\u0131:<\/strong><br \/>\n*   <strong>Asenkron G\u00fcncellemeler:<\/strong> <code>setSayac<\/code> gibi durum g\u00fcncelleme fonksiyonlar\u0131 asenkron \u00e7al\u0131\u015fabilir. Yani, <code>setSayac<\/code>&#8216;\u0131 \u00e7a\u011f\u0131rd\u0131ktan hemen sonra <code>sayac<\/code> de\u011ferinin g\u00fcncellenmi\u015f halini g\u00f6rmeyebilirsiniz. E\u011fer bir sonraki durumu \u00f6nceki duruma dayanarak hesapl\u0131yorsan\u0131z, bir fonksiyon ge\u00e7irmek en g\u00fcvenli yoldur: <code>setSayac(prevSayac => prevSayac + 1);<\/code><br \/>\n*   <strong>Do\u011frudan De\u011fi\u015ftirmeyin (Immutable State):<\/strong> Durum nesnelerini veya dizilerini do\u011frudan de\u011fi\u015ftirmek yerine, her zaman yeni bir nesne veya dizi olu\u015fturarak g\u00fcncelleme yapmal\u0131s\u0131n\u0131z.<\/p>\n<pre><code class=\"language-jsx\">\/\/ Hatal\u0131: Do\u011frudan de\u011fi\u015ftirme\n    \/\/ const [kullanici, setKullanici] = useState({ ad: 'Ali', yas: 25 });\n    \/\/ kullanici.yas = 26;\n    \/\/ setKullanici(kullanici);\n\n    \/\/ Do\u011fru: Yeni bir nesne olu\u015fturma (spread operat\u00f6r\u00fc ile)\n    const [kullanici, setKullanici] = useState({ ad: 'Ali', yas: 25 });\n    setKullanici({ ...kullanici, yas: 26 });<\/code><\/pre>\n<h4>Olay Y\u00f6netimi (Event Handling)<\/h4>\n<p>React, HTML&#8217;deki olaylar\u0131 (t\u0131klamalar, form g\u00f6nderimleri, klavye giri\u015fleri vb.) y\u00f6netmek i\u00e7in sentetik olaylar (Synthetic Events) sistemi kullan\u0131r. Bu sistem, taray\u0131c\u0131lar aras\u0131 uyumluluk sa\u011flar ve olaylar\u0131 daha tutarl\u0131 bir \u015fekilde ele alman\u0131za olanak tan\u0131r.<\/p>\n<pre><code class=\"language-jsx\">import React, { useState } from 'react';\n\nfunction FormOrnegi() {\n  const [deger, setDeger] = useState('');\n\n  const handleChange = (event) => {\n    setDeger(event.target.value); \/\/ Input de\u011ferini state'e kaydet\n  };\n\n  const handleSubmit = (event) => {\n    event.preventDefault(); \/\/ Sayfan\u0131n yeniden y\u00fcklenmesini engeller\n    alert('Girilen de\u011fer: ' + deger);\n    setDeger(''); \/\/ Formu s\u0131f\u0131rla\n  };\n\n  return (\n    <form onSubmit={handleSubmit}>\n      <label>\n        \u0130sminizi girin:\n        <input type=\"text\" value={deger} onChange={handleChange} \/>\n      <\/label>\n      <button type=\"submit\">G\u00f6nder<\/button>\n      <p>\u015eu anda yaz\u0131lan: {deger}<\/p>\n    <\/form>\n  );\n}\n\nexport default FormOrnegi;<\/code><\/pre>\n<p>Yukar\u0131daki \u00f6rnekte:<br \/>\n*   <code>onChange<\/code> olay\u0131, input alan\u0131n\u0131n de\u011feri her de\u011fi\u015fti\u011finde <code>handleChange<\/code> fonksiyonunu tetikler. <code>event.target.value<\/code> ile input&#8217;un g\u00fcncel de\u011ferine eri\u015filir ve <code>setDeger<\/code> ile durum g\u00fcncellenir.<br \/>\n*   <code>onSubmit<\/code> olay\u0131, form g\u00f6nderildi\u011finde <code>handleSubmit<\/code> fonksiyonunu tetikler. <code>event.preventDefault()<\/code> \u00e7a\u011fr\u0131s\u0131, taray\u0131c\u0131n\u0131n varsay\u0131lan form g\u00f6nderme davran\u0131\u015f\u0131n\u0131 (sayfay\u0131 yeniden y\u00fckleme) engeller.<\/p>\n<h3>React Hook&#8217;lar\u0131 ile Daha G\u00fc\u00e7l\u00fc Bile\u015fenler<\/h3>\n<p>React Hook&#8217;lar\u0131, React 16.8 ile tan\u0131t\u0131lan ve fonksiyonel bile\u015fenlere durum ve di\u011fer React \u00f6zelliklerini (ya\u015fam d\u00f6ng\u00fcs\u00fc metotlar\u0131 gibi) &#8220;ba\u011flaman\u0131n&#8221; bir yolunu sunan fonksiyonlard\u0131r. Hook&#8217;lar sayesinde, s\u0131n\u0131f bile\u015fenlerine ihtiya\u00e7 duymadan fonksiyonel bile\u015fenlerle t\u00fcm \u00f6zellikleri kullanabiliriz.<\/p>\n<h4><code>useState<\/code> (Tekrar Vurgu)<\/h4>\n<p>Daha \u00f6nce de bahsetti\u011fimiz gibi, <code>useState<\/code> Hook&#8217;u fonksiyonel bile\u015fenlere yerel durum eklemek i\u00e7in kullan\u0131l\u0131r.<\/p>\n<pre><code class=\"language-jsx\">import React, { useState } from 'react';\n\nfunction ToggleButton() {\n  const [acikMi, setAcikMi] = useState(false); \/\/ Ba\u015flang\u0131\u00e7ta kapal\u0131\n\n  const handleClick = () => {\n    setAcikMi(!acikMi); \/\/ Durumu tersine \u00e7evir\n  };\n\n  return (\n    <button onClick={handleClick}>\n      {acikMi ? 'A\u00e7\u0131k' : 'Kapal\u0131'}\n    <\/button>\n  );\n}<\/code><\/pre>\n<h4><code>useEffect<\/code><\/h4>\n<p><code>useEffect<\/code> Hook&#8217;u, fonksiyonel bile\u015fenlerde yan etkileri (side effects) y\u00f6netmek i\u00e7in kullan\u0131l\u0131r. Yan etkiler, bir bile\u015fenin render edilmesinin ard\u0131ndan ger\u00e7ekle\u015fen ve React&#8217;in kontrol\u00fc d\u0131\u015f\u0131ndaki i\u015flemlerdir. \u00d6rnekler aras\u0131nda:<br \/>\n*   Veri \u00e7ekme (API istekleri)<br \/>\n*   DOM&#8217;u manuel olarak manip\u00fcle etme<br \/>\n*   Zamanlay\u0131c\u0131lar ayarlama (<code>setTimeout<\/code>, <code>setInterval<\/code>)<br \/>\n*   Olay dinleyicileri ekleme\/kald\u0131rma<br \/>\n*   Subscription (abonelik) olu\u015fturma\/iptal etme<\/p>\n<p><code>useEffect<\/code> Hook&#8217;u, bile\u015fenin render edilmesinin ard\u0131ndan \u00e7al\u0131\u015f\u0131r. Ba\u011f\u0131ml\u0131l\u0131k dizisi (dependency array) ile ne zaman \u00e7al\u0131\u015faca\u011f\u0131n\u0131 kontrol edebilirsiniz.<\/p>\n<pre><code class=\"language-jsx\">import React, { useState, useEffect } from 'react';\n\nfunction VeriCekme() {\n  const [veri, setVeri] = useState(null);\n  const [yukleniyor, setYukleniyor] = useState(true);\n  const [hata, setHata] = useState(null);\n\n  \/\/ useEffect, bile\u015fen render edildikten sonra \u00e7al\u0131\u015f\u0131r\n  useEffect(() => {\n    \/\/ Yan etki: Veri \u00e7ekme i\u015flemi\n    const fetchData = async () => {\n      try {\n        const response = await fetch('https:\/\/jsonplaceholder.typicode.com\/posts\/1');\n        if (!response.ok) {\n          throw new Error(<code>HTTP hata! Durum: ${response.status}<\/code>);\n        }\n        const result = await response.json();\n        setVeri(result);\n      } catch (error) {\n        setHata(error);\n      } finally {\n        setYukleniyor(false);\n      }\n    };\n\n    fetchData();\n\n    \/\/ Temizleme fonksiyonu (cleanup function)\n    \/\/ Bile\u015fen DOM'dan kald\u0131r\u0131ld\u0131\u011f\u0131nda veya ba\u011f\u0131ml\u0131l\u0131klar de\u011fi\u015fti\u011finde \u00e7al\u0131\u015f\u0131r\n    return () => {\n      \/\/ \u00d6rne\u011fin, bir aboneli\u011fi iptal etme\n      console.log('Bile\u015fen temizleniyor veya veri \u00e7ekme i\u015flemi iptal ediliyor.');\n    };\n  }, []); \/\/ Bo\u015f ba\u011f\u0131ml\u0131l\u0131k dizisi: Sadece bile\u015fen mount edildi\u011finde bir kez \u00e7al\u0131\u015f\u0131r\n\n  if (yukleniyor) return <p>Veriler y\u00fckleniyor...<\/p>;\n  if (hata) return <p>Hata: {hata.message}<\/p>;\n\n  return (\n    <div>\n      <h3>API'den Gelen Veri:<\/h3>\n      <p>Ba\u015fl\u0131k: {veri.title}<\/p>\n      <p>\u0130\u00e7erik: {veri.body}<\/p>\n    <\/div>\n  );\n}\n\nexport default VeriCekme;<\/code><\/pre>\n<p><strong>Ba\u011f\u0131ml\u0131l\u0131k Dizisi (Dependency Array):<\/strong><br \/>\n<code>useEffect<\/code>&#8216;in ikinci arg\u00fcman\u0131 olan ba\u011f\u0131ml\u0131l\u0131k dizisi, Hook&#8217;un ne zaman yeniden \u00e7al\u0131\u015faca\u011f\u0131n\u0131 belirler:<br \/>\n*   <strong>Bo\u015f dizi <code>[]<\/code>:<\/strong> Efekt sadece bile\u015fen ilk kez render edildi\u011finde (mount edildi\u011finde) bir kez \u00e7al\u0131\u015f\u0131r ve bir daha \u00e7al\u0131\u015fmaz. Genellikle veri \u00e7ekme i\u015flemleri i\u00e7in kullan\u0131l\u0131r.<br \/>\n*   <strong>Dizi bo\u015f de\u011fil <code>[prop1, state2]<\/code>:<\/strong> Efekt, dizideki herhangi bir de\u011fer de\u011fi\u015fti\u011finde yeniden \u00e7al\u0131\u015f\u0131r.<br \/>\n*   <strong>Dizi yok (arg\u00fcman atlan\u0131rsa):<\/strong> Efekt, bile\u015fenin her render edilmesinden sonra \u00e7al\u0131\u015f\u0131r. Bu genellikle istenmeyen bir durumdur ve performans sorunlar\u0131na yol a\u00e7abilir.<\/p>\n<p><strong>Temizleme Fonksiyonu (Cleanup Function):<\/strong><br \/>\n<code>useEffect<\/code> Hook&#8217;u, bir fonksiyon d\u00f6nd\u00fcrebilir. Bu d\u00f6nd\u00fcr\u00fclen fonksiyon, bile\u015fen DOM&#8217;dan kald\u0131r\u0131lmadan (unmount edilmeden) \u00f6nce veya ba\u011f\u0131ml\u0131l\u0131klar de\u011fi\u015fmeden \u00f6nce \u00e7al\u0131\u015ft\u0131r\u0131l\u0131r. Bu, bellek s\u0131z\u0131nt\u0131lar\u0131n\u0131 \u00f6nlemek i\u00e7in olay dinleyicilerini kald\u0131rmak, zamanlay\u0131c\u0131lar\u0131 temizlemek veya abonelikleri iptal etmek gibi temizleme i\u015flemleri i\u00e7in idealdir.<\/p>\n<h4>Di\u011fer S\u0131k Kullan\u0131lan Hook&#8217;lar<\/h4>\n<p>React, <code>useState<\/code> ve <code>useEffect<\/code> d\u0131\u015f\u0131nda bir\u00e7ok ba\u015fka yerle\u015fik Hook sunar:<br \/>\n*   <strong><code>useContext<\/code>:<\/strong> React Context API&#8217;\u0131n\u0131 kullanarak bile\u015fen a\u011fac\u0131nda derinlere veri ge\u00e7irmeyi kolayla\u015ft\u0131r\u0131r. Prop drilling (prop&#8217;lar\u0131 birden \u00e7ok alt bile\u015fene aktarma) sorununu \u00e7\u00f6zer.<br \/>\n*   <strong><code>useReducer<\/code>:<\/strong> Daha karma\u015f\u0131k durum mant\u0131\u011f\u0131na sahip bile\u015fenler i\u00e7in <code>useState<\/code>&#8216;e bir alternatiftir. <code>Redux<\/code>&#8216;taki reducer kavram\u0131na benzer \u015fekilde \u00e7al\u0131\u015f\u0131r.<br \/>\n*   <strong><code>useRef<\/code>:<\/strong> DOM elementlerine do\u011frudan eri\u015fmek veya bile\u015fen render&#8217;lar\u0131 aras\u0131nda kal\u0131c\u0131 bir de\u011feri saklamak i\u00e7in kullan\u0131l\u0131r.<br \/>\n*   <strong><code>useCallback<\/code>, <code>useMemo<\/code>:<\/strong> Performans optimizasyonlar\u0131 i\u00e7in kullan\u0131l\u0131r. Fonksiyonlar\u0131n veya pahal\u0131 hesaplamalar\u0131n gereksiz yere yeniden olu\u015fturulmas\u0131n\u0131 veya \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131n\u0131 engeller.<br \/>\n*   <strong>Custom Hooks:<\/strong> Kendi \u00f6zel Hook&#8217;lar\u0131n\u0131z\u0131 olu\u015fturarak tekrar eden mant\u0131\u011f\u0131 bile\u015fenler aras\u0131nda payla\u015fabilirsiniz. <code>use<\/code> ile ba\u015flayan herhangi bir JavaScript fonksiyonu bir Hook olarak kabul edilir.<\/p>\n<p>Hook&#8217;lar, fonksiyonel bile\u015fenleri daha g\u00fc\u00e7l\u00fc hale getirerek kodun daha d\u00fczenli, okunabilir ve test edilebilir olmas\u0131n\u0131 sa\u011flar.<\/p>\n<h3>Uygulama Geli\u015ftirme Pratikleri ve \u0130pu\u00e7lar\u0131<\/h3>\n<p>React ile uygulama geli\u015ftirirken, kodunuzu daha s\u00fcrd\u00fcr\u00fclebilir, performansl\u0131 ve okunabilir hale getirmek i\u00e7in baz\u0131 en iyi pratikleri ve ipu\u00e7lar\u0131n\u0131 takip etmek \u00f6nemlidir.<\/p>\n<h4>Bile\u015fen Hiyerar\u015fisi ve Yap\u0131s\u0131<\/h4>\n<p>Bile\u015fenlerinizi iyi organize etmek, b\u00fcy\u00fck projelerde y\u00f6netilebilirli\u011fi art\u0131r\u0131r.<br \/>\n*   <strong>Ak\u0131ll\u0131 (Container) ve Sunum (Presentational) Bile\u015fenler:<\/strong> Bu ayr\u0131m, bile\u015fenleri sorumluluklar\u0131na g\u00f6re ay\u0131rman\u0131za yard\u0131mc\u0131 olur.<br \/>\n    *   <strong>Ak\u0131ll\u0131\/Kapsay\u0131c\u0131 Bile\u015fenler:<\/strong> Veri \u00e7ekme, durum y\u00f6netimi, mant\u0131k y\u00fcr\u00fctme gibi i\u015fleri yaparlar. Genellikle daha az g\u00f6rseldirler ve alt bile\u015fenlere prop&#8217;lar arac\u0131l\u0131\u011f\u0131yla veri ve fonksiyonlar iletirler. \u00d6rnek: <code>UserListContainer<\/code> (kullan\u0131c\u0131 verilerini \u00e7eker ve <code>UserList<\/code>&#8216;e iletir).<br \/>\n    *   <strong>Sunum\/G\u00f6rsel Bile\u015fenler:<\/strong> Sadece prop&#8217;lardan gelen verileri al\u0131p UI&#8217;\u0131 render ederler. Kendi durumlar\u0131 veya karma\u015f\u0131k mant\u0131klar\u0131 yoktur. Yeniden kullan\u0131labilirlikleri y\u00fcksektir. \u00d6rnek: <code>Button<\/code>, <code>UserCard<\/code>.<br \/>\n*   <strong>Klas\u00f6r Yap\u0131s\u0131 \u00d6nerileri:<\/strong> Projenizin <code>src<\/code> klas\u00f6r\u00fcn\u00fc organize etmek i\u00e7in yayg\u0131n yakla\u015f\u0131mlar vard\u0131r:<br \/>\n    *   <strong><code>components\/<\/code>:<\/strong> T\u00fcm yeniden kullan\u0131labilir UI bile\u015fenlerinizi i\u00e7erir (\u00f6rn. <code>Button.js<\/code>, <code>Modal.js<\/code>).<br \/>\n    *   <strong><code>pages\/<\/code> veya <code>views\/<\/code>:<\/strong> Uygulaman\u0131z\u0131n farkl\u0131 sayfalar\u0131n\u0131 veya ana g\u00f6r\u00fcn\u00fcmlerini temsil eden bile\u015fenleri i\u00e7erir (\u00f6rn. <code>HomePage.js<\/code>, <code>AboutPage.js<\/code>). Bu bile\u015fenler genellikle ak\u0131ll\u0131 bile\u015fenlerdir.<br \/>\n    *   <strong><code>utils\/<\/code>:<\/strong> Yard\u0131mc\u0131 fonksiyonlar, sabitler, API servisleri gibi genel ama\u00e7l\u0131 kodlar\u0131 i\u00e7erir.<br \/>\n    *   <strong><code>hooks\/<\/code>:<\/strong> \u00d6zel Hook&#8217;lar\u0131n\u0131z\u0131 i\u00e7erir.<br \/>\n    *   <strong><code>assets\/<\/code>:<\/strong> Resimler, fontlar gibi statik dosyalar\u0131 i\u00e7erir.<\/p>\n<h4>Veri Ak\u0131\u015f\u0131 Y\u00f6netimi<\/h4>\n<p>React&#8217;te veri ak\u0131\u015f\u0131 genellikle tek y\u00f6nl\u00fcd\u00fcr (ebeveynden \u00e7ocu\u011fa). Ancak, derin i\u00e7 i\u00e7e ge\u00e7mi\u015f bile\u015fenlerde prop&#8217;lar\u0131 bir\u00e7ok katmandan ge\u00e7irmek (prop drilling) bir sorun haline gelebilir.<br \/>\n*   <strong>Prop Drilling:<\/strong> Bir verinin, onu kullanacak olan alt bile\u015fene ula\u015fana kadar aradaki bir\u00e7ok bile\u015fenden prop olarak ge\u00e7irilmesi durumudur. Bu, kodu daha az okunabilir ve bak\u0131m\u0131 zor hale getirebilir.<br \/>\n*   <strong>\u00c7\u00f6z\u00fcmler:<\/strong><br \/>\n    *   <strong>Context API:<\/strong> React&#8217;in yerle\u015fik bir \u00f6zelli\u011fidir ve bile\u015fen a\u011fac\u0131nda derinlere veri ge\u00e7irmek i\u00e7in kullan\u0131l\u0131r. Belirli bir ba\u011flam (context) olu\u015fturursunuz ve bu ba\u011flam\u0131 sa\u011flayan bir <code>Provider<\/code> bile\u015feni ile veriyi a\u011fa\u00e7ta a\u015fa\u011f\u0131ya do\u011fru iletirsiniz. Alt bile\u015fenler <code>useContext<\/code> Hook&#8217;u ile bu verilere eri\u015febilir. \u00d6zellikle tema ayarlar\u0131, kullan\u0131c\u0131 kimlik do\u011frulama bilgileri gibi global durumlar i\u00e7in idealdir.<br \/>\n    *   <strong>Durum Y\u00f6netimi K\u00fct\u00fcphaneleri:<\/strong> Redux, Zustand, Jotai gibi k\u00fct\u00fcphaneler, uygulaman\u0131z\u0131n global durumunu merkezi bir yerde y\u00f6netmenizi sa\u011flar. B\u00fcy\u00fck ve karma\u015f\u0131k uygulamalarda prop drilling sorununu tamamen ortadan kald\u0131rabilirler.<\/p>\n<h4>Ko\u015fullu Renderlama (Conditional Rendering)<\/h4>\n<p>React&#8217;te, belirli bir ko\u015fula ba\u011fl\u0131 olarak farkl\u0131 elementleri veya bile\u015fenleri render edebilirsiniz.<br \/>\n*   <strong><code>if\/else<\/code> Deyimleri:<\/strong> JSX d\u0131\u015f\u0131nda normal JavaScript <code>if\/else<\/code> kullanarak ko\u015fullu renderlama yapabilirsiniz.<\/p>\n<pre><code class=\"language-jsx\">function KullaniciGirisDurumu({ isLoggedIn }) {\n      if (isLoggedIn) {\n        return <p>Ho\u015f geldiniz!<\/p>;\n      } else {\n        return <p>L\u00fctfen giri\u015f yap\u0131n.<\/p>;\n      }\n    }<\/code><\/pre>\n<p>*   <strong>Ternary Operat\u00f6r (<code>ko\u015ful ? do\u011fru : yanl\u0131\u015f<\/code>):<\/strong> JSX i\u00e7inde ko\u015fullu renderlama i\u00e7in \u00e7ok kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<pre><code class=\"language-jsx\">function KullaniciGirisDurumu({ isLoggedIn }) {\n      return (\n        <p>{isLoggedIn ? 'Ho\u015f geldiniz!' : 'L\u00fctfen giri\u015f yap\u0131n.'}<\/p>\n      );\n    }<\/code><\/pre>\n<p>*   <strong>Mant\u0131ksal <code>&&<\/code> Operat\u00f6r\u00fc:<\/strong> Bir ko\u015ful do\u011fruysa bir element render etmek, yanl\u0131\u015fsa hi\u00e7bir \u015fey render etmemek i\u00e7in kullan\u0131l\u0131r.<\/p>\n<pre><code class=\"language-jsx\">function UyariMesaji({ uyari }) {\n      return (\n        <div>\n          {uyari && <p style={{ color: 'red' }}>{uyari}<\/p>}\n        <\/div>\n      );\n    }\n    \/\/ <UyariMesaji uyari=\"Dikkat!\" \/> -> <p>Dikkat!<\/p>\n    \/\/ <UyariMesaji uyari={null} \/> -> Hi\u00e7bir \u015fey render edilmez<\/code><\/pre>\n<h4>Liste Renderlama (List Rendering)<\/h4>\n<p>Bir dizi veriyi render etmek i\u00e7in <code>map()<\/code> metodunu kullanmak React&#8217;te yayg\u0131n bir y\u00f6ntemdir.<br \/>\n*   <strong><code>map()<\/code> Metodu:<\/strong> JavaScript&#8217;in <code>map()<\/code> dizisi metodu, bir dizideki her \u00f6\u011fe i\u00e7in bir bile\u015fen veya element d\u00f6nd\u00fcrmek i\u00e7in idealdir.<\/p>\n<pre><code class=\"language-jsx\">function UrunListesi({ urunler }) {\n      return (\n        <ul>\n          {urunler.map(urun => (\n            <li key={urun.id}> {\/<em> Her liste \u00f6\u011fesi i\u00e7in benzersiz bir 'key' prop'u gereklidir <\/em>\/}\n              {urun.ad} - {urun.fiyat} TL\n            <\/li>\n          ))}\n        <\/ul>\n      );\n    }\n\n    const urunlerData = [\n      { id: 1, ad: 'Klavye', fiyat: 250 },\n      { id: 2, ad: 'Fare', fiyat: 100 },\n      { id: 3, ad: 'Monit\u00f6r', fiyat: 1500 },\n    ];\n\n    \/\/ <UrunListesi urunler={urunlerData} \/><\/code><\/pre>\n<p>*   <strong><code>key<\/code> Prop&#8217;unun \u00d6nemi:<\/strong> Liste \u00f6\u011felerini render ederken, React her \u00f6\u011feye benzersiz bir <code>key<\/code> prop&#8217;u ataman\u0131z\u0131 bekler. <code>key<\/code>&#8216;ler, React&#8217;in liste \u00f6\u011felerini verimli bir \u015fekilde g\u00fcncelleyebilmesi i\u00e7in her \u00f6\u011feyi tan\u0131mlamas\u0131na yard\u0131mc\u0131 olur. <code>key<\/code> olarak genellikle veritaban\u0131ndan gelen benzersiz bir ID kullan\u0131l\u0131r. E\u011fer benzersiz bir ID yoksa, dizin (index) kullan\u0131labilir ancak bu, liste \u00f6\u011felerinin s\u0131ras\u0131 de\u011fi\u015fti\u011finde veya yeni \u00f6\u011feler eklendi\u011finde sorunlara yol a\u00e7abilir, bu y\u00fczden m\u00fcmk\u00fcnse benzersiz ID&#8217;ler tercih edilmelidir.<\/p>\n<h4>Form Y\u00f6netimi<\/h4>\n<p>React&#8217;te formlarla \u00e7al\u0131\u015fmak, genellikle &#8220;kontroll\u00fc bile\u015fenler&#8221; (controlled components) kavram\u0131n\u0131 i\u00e7erir.<br \/>\n*   <strong>Kontroll\u00fc Bile\u015fenler:<\/strong> Bir HTML form elementi (input, textarea, select) de\u011ferini React state&#8217;i taraf\u0131ndan kontrol edildi\u011finde &#8220;kontroll\u00fc&#8221; hale gelir. Bu, form verilerinin her zaman React state&#8217;inde sakland\u0131\u011f\u0131 ve g\u00fcncellendi\u011fi anlam\u0131na gelir.<\/p>\n<pre><code class=\"language-jsx\">import React, { useState } from 'react';\n\n    function KayitFormu() {\n      const [email, setEmail] = useState('');\n      const [sifre, setSifre] = useState('');\n\n      const handleEmailChange = (e) => {\n        setEmail(e.target.value);\n      };\n\n      const handleSifreChange = (e) => {\n        setSifre(e.target.value);\n      };\n\n      const handleSubmit = (e) => {\n        e.preventDefault();\n        alert(<code>E-posta: ${email}, \u015eifre: ${sifre}<\/code>);\n        \/\/ Formu s\u0131f\u0131rla\n        setEmail('');\n        setSifre('');\n      };\n\n      return (\n        <form onSubmit={handleSubmit}>\n          <div>\n            <label>\n              E-posta:\n              <input type=\"email\" value={email} onChange={handleEmailChange} \/>\n            <\/label>\n          <\/div>\n          <div>\n            <label>\n              \u015eifre:\n              <input type=\"password\" value={sifre} onChange={handleSifreChange} \/>\n            <\/label>\n          <\/div>\n          <button type=\"submit\">Kaydol<\/button>\n        <\/form>\n      );\n    }\n\n    export default KayitFormu;<\/code><\/pre>\n<p>    Bu yakla\u015f\u0131mda, her input eleman\u0131n\u0131n <code>value<\/code> prop&#8217;u bir state de\u011fi\u015fkenine ba\u011fl\u0131d\u0131r ve <code>onChange<\/code> olay\u0131, input de\u011feri her de\u011fi\u015fti\u011finde bu state de\u011fi\u015fkenini g\u00fcnceller. Bu, form verilerini kolayca eri\u015filebilir ve y\u00f6netilebilir hale getirir.<\/p>\n<h3>Bir Sonraki Ad\u0131mlar ve React Ekosistemi<\/h3>\n<p>React&#8217;in temelini \u00f6\u011frendikten sonra, daha karma\u015f\u0131k ve ger\u00e7ek d\u00fcnya uygulamalar\u0131 geli\u015ftirmek i\u00e7in ek ara\u00e7lara ve k\u00fct\u00fcphanelere ihtiyac\u0131n\u0131z olacakt\u0131r. React&#8217;in geni\u015f ekosistemi, bu ihtiya\u00e7lar\u0131 kar\u015f\u0131lamak i\u00e7in bir\u00e7ok se\u00e7enek sunar.<\/p>\n<h4>Routing (Y\u00f6nlendirme)<\/h4>\n<p>Tek sayfal\u0131k uygulamalarda (SPA), farkl\u0131 URL&#8217;ler i\u00e7in farkl\u0131 bile\u015fenleri g\u00f6stermek (sayfalar aras\u0131 ge\u00e7i\u015f yapmak) i\u00e7in bir y\u00f6nlendirme k\u00fct\u00fcphanesine ihtiyac\u0131n\u0131z vard\u0131r.<br \/>\n*   <strong>React Router DOM:<\/strong> React uygulamalar\u0131 i\u00e7in en pop\u00fcler y\u00f6nlendirme \u00e7\u00f6z\u00fcm\u00fcd\u00fcr. <code>BrowserRouter<\/code>, <code>Routes<\/code>, <code>Route<\/code>, <code>Link<\/code> gibi bile\u015fenler sa\u011flayarak deklaratif bir y\u00f6nlendirme deneyimi sunar.<\/p>\n<h4>Durum Y\u00f6netimi (Global State)<\/h4>\n<p>Uygulaman\u0131z b\u00fcy\u00fcd\u00fck\u00e7e, bile\u015fenler aras\u0131nda payla\u015f\u0131lan global durumu y\u00f6netmek karma\u015f\u0131k hale gelebilir.<br \/>\n*   <strong>Context API:<\/strong> React&#8217;in yerle\u015fik bir \u00f6zelli\u011fi olup, prop drilling sorununu azaltmak i\u00e7in bile\u015fen a\u011fac\u0131nda derinlere veri ge\u00e7irmeyi sa\u011flar. K\u00fc\u00e7\u00fck ve orta \u00f6l\u00e7ekli uygulamalar i\u00e7in yeterli olabilir.<br \/>\n*   <strong>Redux (ve Redux Toolkit):<\/strong> B\u00fcy\u00fck ve karma\u015f\u0131k uygulamalar i\u00e7in en pop\u00fcler durum y\u00f6netim k\u00fct\u00fcphanesidir. Merkezi bir &#8220;store&#8221; (depo) kullanarak t\u00fcm uygulaman\u0131n durumunu y\u00f6netir. Redux Toolkit, Redux&#8217;\u0131 daha kolay ve h\u0131zl\u0131 kullanmak i\u00e7in \u00f6nerilen modern bir yakla\u015f\u0131md\u0131r.<br \/>\n*   <strong>Zustand, Jotai, Recoil:<\/strong> Daha hafif ve modern alternatifler olup, Redux&#8217;tan daha az boilerplate (tekrar eden kod) ile global durum y\u00f6netimi sunarlar.<\/p>\n<h4>Stil Y\u00f6netimi<\/h4>\n<p>React bile\u015fenlerinizi stilize etmek i\u00e7in bir\u00e7ok farkl\u0131 yakla\u015f\u0131m vard\u0131r:<br \/>\n*   <strong>CSS Mod\u00fclleri:<\/strong> CSS dosyalar\u0131n\u0131z\u0131 bile\u015fenlere \u00f6zel hale getirerek isim \u00e7ak\u0131\u015fmalar\u0131n\u0131 \u00f6nler.<br \/>\n*   <strong>Styled Components \/ Emotion:<\/strong> CSS kodunu JavaScript i\u00e7inde yazman\u0131za olanak tan\u0131yan &#8220;CSS-in-JS&#8221; k\u00fct\u00fcphaneleridir. Bile\u015fen tabanl\u0131 bir stil yakla\u015f\u0131m\u0131 sunarlar.<br \/>\n*   <strong>Tailwind CSS:<\/strong> Utility-first bir CSS framework&#8217;\u00fcd\u00fcr. \u00d6nceden tan\u0131mlanm\u0131\u015f k\u00fc\u00e7\u00fck CSS s\u0131n\u0131flar\u0131n\u0131 kullanarak do\u011frudan JSX i\u00e7inde stiller uygulaman\u0131za olanak tan\u0131r.<br \/>\n*   <strong>Sass\/Less:<\/strong> CSS preprocessor&#8217;lar\u0131 olup, daha g\u00fc\u00e7l\u00fc ve mod\u00fcler CSS yazman\u0131z\u0131 sa\u011flarlar.<\/p>\n<h4>API Entegrasyonu<\/h4>\n<p>Uygulaman\u0131z\u0131n genellikle harici API&#8217;lerden veri \u00e7ekmesi veya API&#8217;ye veri g\u00f6ndermesi gerekir.<br \/>\n*   <strong><code>fetch<\/code> API:<\/strong> Modern taray\u0131c\u0131larda yerle\u015fik olarak bulunan, Promise tabanl\u0131 bir API istek mekanizmas\u0131d\u0131r.<br \/>\n*   <strong>Axios:<\/strong> Pop\u00fcler bir \u00fc\u00e7\u00fcnc\u00fc taraf HTTP istemcisi olup, <code>fetch<\/code>&#8216;e g\u00f6re daha fazla \u00f6zellik (istek\/yan\u0131t interceptor&#8217;lar\u0131, otomatik JSON d\u00f6n\u00fc\u015f\u00fcm\u00fc vb.) sunar.<\/p>\n<h4>Test<\/h4>\n<p>Uygulaman\u0131z\u0131n do\u011fru \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olmak i\u00e7in test yazmak \u00f6nemlidir.<br \/>\n*   <strong>Jest:<\/strong> Facebook taraf\u0131ndan geli\u015ftirilen pop\u00fcler bir JavaScript test framework&#8217;\u00fcd\u00fcr.<br \/>\n*   <strong>React Testing Library:<\/strong> Bile\u015fenlerinizi kullan\u0131c\u0131lar\u0131n etkile\u015fim \u015fekline en yak\u0131n \u015fekilde test etmeye odaklanan bir k\u00fct\u00fcphanedir.<\/p>\n<h4>Sunucu Taraf\u0131nda Renderlama (SSR) ve Statik Site \u00dcretimi (SSG)<\/h4>\n<p>SEO, performans ve ilk y\u00fckleme h\u0131z\u0131 gibi nedenlerle, React uygulamalar\u0131n\u0131 sunucu taraf\u0131nda render etmek veya statik siteler olarak olu\u015fturmak isteyebilirsiniz.<br \/>\n*   <strong>Next.js:<\/strong> React i\u00e7in pop\u00fcler bir framework&#8217;t\u00fcr. SSR, SSG, API rotalar\u0131 ve daha bir\u00e7ok \u00f6zellikle tam te\u015fekk\u00fcll\u00fc bir \u00fcretim ortam\u0131 sunar. B\u00fcy\u00fck \u00f6l\u00e7ekli ve performans odakl\u0131 uygulamalar i\u00e7in s\u0131kl\u0131kla tercih edilir.<br \/>\n*   <strong>Gatsby:<\/strong> Statik site \u00fcretimi i\u00e7in optimize edilmi\u015f bir framework&#8217;t\u00fcr. GraphQL ile veri \u00e7ekme yetenekleri sunar.<\/p>\n<h4>Mobil Geli\u015ftirme<\/h4>\n<p>React bilginizi kullanarak mobil uygulamalar geli\u015ftirebilirsiniz.<br \/>\n*   <strong>React Native:<\/strong> Tek bir JavaScript kod taban\u0131ndan hem iOS hem de Android i\u00e7in yerel mobil uygulamalar geli\u015ftirmenizi sa\u011flayan bir framework&#8217;t\u00fcr.<\/p>\n<h4>Topluluk ve Kaynaklar<\/h4>\n<p>React \u00f6\u011frenme yolculu\u011funuzda size yard\u0131mc\u0131 olacak bir\u00e7ok kaynak bulunmaktad\u0131r:<br \/>\n*   <strong>React Resmi Dok\u00fcmantasyonu:<\/strong> En g\u00fcncel ve do\u011fru bilgi kayna\u011f\u0131d\u0131r. \u00c7ok iyi yaz\u0131lm\u0131\u015f ve kapsaml\u0131d\u0131r.<br \/>\n*   <strong>\u00c7evrimi\u00e7i Kurslar:<\/strong> Udemy, Coursera, freeCodeCamp, egghead.io gibi platformlarda bir\u00e7ok kaliteli React kursu bulunmaktad\u0131r.<br \/>\n*   <strong>Bloglar ve Forumlar:<\/strong> Medium, dev.to gibi platformlardaki blog yaz\u0131lar\u0131 ve Stack Overflow gibi forumlar, kar\u015f\u0131la\u015ft\u0131\u011f\u0131n\u0131z sorunlara \u00e7\u00f6z\u00fcmler bulman\u0131zda ve yeni \u015feyler \u00f6\u011frenmenizde yard\u0131mc\u0131 olur.<br \/>\n*   <strong>GitHub:<\/strong> A\u00e7\u0131k kaynakl\u0131 React projelerini incelemek ve katk\u0131da bulunmak, \u00f6\u011frenmenin harika bir yoludur.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>React, modern web uygulamalar\u0131 geli\u015ftirmek i\u00e7in inan\u0131lmaz derecede g\u00fc\u00e7l\u00fc ve esnek bir JavaScript k\u00fct\u00fcphanesidir. Bildirimsel yakla\u015f\u0131m\u0131, bile\u015fen tabanl\u0131 mimarisi ve Sanal DOM gibi \u00f6zellikleriyle geli\u015ftiricilere performansl\u0131, bak\u0131m\u0131 kolay ve \u00f6l\u00e7eklenebilir uygulamalar olu\u015fturma imkan\u0131 sunar. Bu makalede, React&#8217;e ba\u015flang\u0131\u00e7 i\u00e7in gerekli geli\u015ftirme ortam\u0131 kurulumundan, bile\u015fenler, props, state, JSX ve Hook&#8217;lar gibi temel kavramlara kadar geni\u015f bir yelpazeyi ele ald\u0131k. Ayr\u0131ca, uygulama geli\u015ftirme pratikleri ve React ekosistemindeki bir sonraki ad\u0131mlar hakk\u0131nda da bilgi verdik.<\/p>\n<p>React \u00f6\u011frenmek, ba\u015flang\u0131\u00e7ta baz\u0131 yeni kavramlarla kar\u015f\u0131la\u015fmak anlam\u0131na gelse de, d\u00fczenli pratik ve sab\u0131rla \u00fcstesinden gelinebilecek bir s\u00fcre\u00e7tir. Unutmay\u0131n ki, yaz\u0131l\u0131m geli\u015ftirme s\u00fcrekli bir \u00f6\u011frenme s\u00fcrecidir. Temelleri sa\u011flam bir \u015fekilde kavrad\u0131ktan sonra, React Router, Redux, Next.js gibi ek k\u00fct\u00fcphaneleri ve framework&#8217;leri ke\u015ffederek becerilerinizi daha da ileri ta\u015f\u0131yabilirsiniz.<\/p>\n<p>Bu rehberin, React d\u00fcnyas\u0131na ad\u0131m atman\u0131z i\u00e7in sa\u011flam bir temel olu\u015fturdu\u011funu ve modern web uygulamalar\u0131 geli\u015ftirmeye olan tutkunuzu art\u0131rd\u0131\u011f\u0131n\u0131 umuyoruz. \u015eimdi s\u0131ra sizde: Kendi React projelerinizi olu\u015fturmaya ba\u015flay\u0131n, pratik yap\u0131n ve bu heyecan verici teknolojinin sundu\u011fu s\u0131n\u0131rs\u0131z olanaklar\u0131 ke\u015ffedin!<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"React ile Ba\u015flang\u0131\u00e7: Modern Web Uygulamalar\u0131 Geli\u015ftirmeye Ad\u0131m Ad\u0131m Giri\u015f\nReact, modern web geli\u015ftirme d\u00fcnyas\u0131nda en pop\u00fcler ve g\u00fc\u00e7l\u00fc","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-40220","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 ile Ba\u015flang\u0131\u00e7: Modern Web Uygulamalar\u0131 Geli\u015ftirmeye Ad\u0131m Ad\u0131m Giri\u015f - 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-ile-baslangic-modern-web-uygulamalari-gelistirmeye-adim-adim-giris\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"React ile Ba\u015flang\u0131\u00e7: Modern Web Uygulamalar\u0131 Geli\u015ftirmeye Ad\u0131m Ad\u0131m Giri\u015f\" \/>\n<meta property=\"og:description\" content=\"React ile Ba\u015flang\u0131\u00e7: Modern Web Uygulamalar\u0131 Geli\u015ftirmeye Ad\u0131m Ad\u0131m Giri\u015f React, modern web geli\u015ftirme d\u00fcnyas\u0131nda en pop\u00fcler ve g\u00fc\u00e7l\u00fc\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/react-ile-baslangic-modern-web-uygulamalari-gelistirmeye-adim-adim-giris\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-25T09:41:08+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=\"27 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/react-ile-baslangic-modern-web-uygulamalari-gelistirmeye-adim-adim-giris\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/react-ile-baslangic-modern-web-uygulamalari-gelistirmeye-adim-adim-giris\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"React ile Ba\u015flang\u0131\u00e7: Modern Web Uygulamalar\u0131 Geli\u015ftirmeye Ad\u0131m Ad\u0131m Giri\u015f\",\"datePublished\":\"2026-02-25T09:41:08+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/react-ile-baslangic-modern-web-uygulamalari-gelistirmeye-adim-adim-giris\/\"},\"wordCount\":4594,\"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-ile-baslangic-modern-web-uygulamalari-gelistirmeye-adim-adim-giris\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/react-ile-baslangic-modern-web-uygulamalari-gelistirmeye-adim-adim-giris\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/react-ile-baslangic-modern-web-uygulamalari-gelistirmeye-adim-adim-giris\/\",\"name\":\"React ile Ba\u015flang\u0131\u00e7: Modern Web Uygulamalar\u0131 Geli\u015ftirmeye Ad\u0131m Ad\u0131m Giri\u015f - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-02-25T09:41:08+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/react-ile-baslangic-modern-web-uygulamalari-gelistirmeye-adim-adim-giris\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/react-ile-baslangic-modern-web-uygulamalari-gelistirmeye-adim-adim-giris\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/react-ile-baslangic-modern-web-uygulamalari-gelistirmeye-adim-adim-giris\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"React ile Ba\u015flang\u0131\u00e7: Modern Web Uygulamalar\u0131 Geli\u015ftirmeye Ad\u0131m Ad\u0131m Giri\u015f\"}]},{\"@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 ile Ba\u015flang\u0131\u00e7: Modern Web Uygulamalar\u0131 Geli\u015ftirmeye Ad\u0131m Ad\u0131m Giri\u015f - 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-ile-baslangic-modern-web-uygulamalari-gelistirmeye-adim-adim-giris\/","og_locale":"tr_TR","og_type":"article","og_title":"React ile Ba\u015flang\u0131\u00e7: Modern Web Uygulamalar\u0131 Geli\u015ftirmeye Ad\u0131m Ad\u0131m Giri\u015f","og_description":"React ile Ba\u015flang\u0131\u00e7: Modern Web Uygulamalar\u0131 Geli\u015ftirmeye Ad\u0131m Ad\u0131m Giri\u015f React, modern web geli\u015ftirme d\u00fcnyas\u0131nda en pop\u00fcler ve g\u00fc\u00e7l\u00fc","og_url":"https:\/\/fatihsoysal.com\/blog\/react-ile-baslangic-modern-web-uygulamalari-gelistirmeye-adim-adim-giris\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-02-25T09:41:08+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"27 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/react-ile-baslangic-modern-web-uygulamalari-gelistirmeye-adim-adim-giris\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/react-ile-baslangic-modern-web-uygulamalari-gelistirmeye-adim-adim-giris\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"React ile Ba\u015flang\u0131\u00e7: Modern Web Uygulamalar\u0131 Geli\u015ftirmeye Ad\u0131m Ad\u0131m Giri\u015f","datePublished":"2026-02-25T09:41:08+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/react-ile-baslangic-modern-web-uygulamalari-gelistirmeye-adim-adim-giris\/"},"wordCount":4594,"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-ile-baslangic-modern-web-uygulamalari-gelistirmeye-adim-adim-giris\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/react-ile-baslangic-modern-web-uygulamalari-gelistirmeye-adim-adim-giris\/","url":"https:\/\/fatihsoysal.com\/blog\/react-ile-baslangic-modern-web-uygulamalari-gelistirmeye-adim-adim-giris\/","name":"React ile Ba\u015flang\u0131\u00e7: Modern Web Uygulamalar\u0131 Geli\u015ftirmeye Ad\u0131m Ad\u0131m Giri\u015f - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-02-25T09:41:08+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/react-ile-baslangic-modern-web-uygulamalari-gelistirmeye-adim-adim-giris\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/react-ile-baslangic-modern-web-uygulamalari-gelistirmeye-adim-adim-giris\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/react-ile-baslangic-modern-web-uygulamalari-gelistirmeye-adim-adim-giris\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"React ile Ba\u015flang\u0131\u00e7: Modern Web Uygulamalar\u0131 Geli\u015ftirmeye Ad\u0131m Ad\u0131m Giri\u015f"}]},{"@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\/40220","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=40220"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/40220\/revisions"}],"predecessor-version":[{"id":40221,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/40220\/revisions\/40221"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=40220"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=40220"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=40220"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}