{"id":36818,"date":"2025-12-23T14:41:13","date_gmt":"2025-12-23T11:41:13","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=36818"},"modified":"2025-12-23T14:41:13","modified_gmt":"2025-12-23T11:41:13","slug":"react-routerda-rota-haritalandirma-kapsamli-bir-rehber","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/react-routerda-rota-haritalandirma-kapsamli-bir-rehber\/","title":{"rendered":"React Router&#8217;da Rota Haritaland\u0131rma: Kapsaml\u0131 Bir Rehber"},"content":{"rendered":"<p><body><\/p>\n<h2>React Router&#8217;da Rota Haritaland\u0131rma: Kapsaml\u0131 Bir Rehber<\/h2>\n<h2>Giri\u015f<\/h2>\n<p>Modern web uygulamalar\u0131, \u00f6zellikle Single-Page Application (SPA) mimarisiyle geli\u015ftirilenler, kullan\u0131c\u0131 deneyimini zenginle\u015ftirmek i\u00e7in dinamik ve ak\u0131c\u0131 bir navigasyon yap\u0131s\u0131na ihtiya\u00e7 duyar. Kullan\u0131c\u0131lar\u0131n farkl\u0131 sayfalar aras\u0131nda kesintisiz ge\u00e7i\u015f yapabilmesi, URL&#8217;nin uygulaman\u0131n mevcut durumunu yans\u0131tmas\u0131 ve taray\u0131c\u0131n\u0131n geri\/ileri butonlar\u0131n\u0131n beklendi\u011fi gibi \u00e7al\u0131\u015fmas\u0131, bir y\u00f6nlendirme (routing) k\u00fct\u00fcphanesinin temel g\u00f6revlerindendir. React ekosisteminde bu ihtiyac\u0131 en g\u00fc\u00e7l\u00fc ve yayg\u0131n \u015fekilde kar\u015f\u0131layan k\u00fct\u00fcphane \u015f\u00fcphesiz React Router&#8217;d\u0131r.<\/p>\n<p>React Router, deklaratif (declarative) bir yakla\u015f\u0131mla, bile\u015fen tabanl\u0131 bir \u015fekilde rotalar\u0131 tan\u0131mlaman\u0131za olanak tan\u0131r. Bu sayede, uygulaman\u0131z\u0131n farkl\u0131 b\u00f6l\u00fcmlerini URL&#8217;lerle e\u015fle\u015ftirmek, dinamik veri y\u00fcklemek, kullan\u0131c\u0131 yetkilendirmesi yapmak ve genel olarak uygulaman\u0131z\u0131n navigasyon ak\u0131\u015f\u0131n\u0131 y\u00f6netmek olduk\u00e7a kolayla\u015f\u0131r. Bu makale, React Router&#8217;\u0131n temel kurulumundan ba\u015flayarak, rota tan\u0131mlama, dinamik rotalar, i\u00e7 i\u00e7e rotalar, programatik navigasyon, rota koruma ve geli\u015fmi\u015f yap\u0131land\u0131rmalar gibi konular\u0131 derinlemesine inceleyerek, React Router ile rota haritaland\u0131rma konusunda kapsaml\u0131 bir rehber sunmay\u0131 ama\u00e7lamaktad\u0131r. Hem React Router v5 hem de daha g\u00fcncel ve basitle\u015ftirilmi\u015f v6 versiyonundaki yakla\u015f\u0131mlara de\u011finilerek, aralar\u0131ndaki temel farklar vurgulanacakt\u0131r.<\/p>\n<h2>React Router&#8217;a Giri\u015f<\/h2>\n<p>React Router, bir React uygulamas\u0131nda URL&#8217;yi bile\u015fenlerle e\u015fle\u015ftirmek i\u00e7in kullan\u0131lan standart bir k\u00fct\u00fcphanedir. Kullan\u0131c\u0131n\u0131n adres \u00e7ubu\u011funa yazd\u0131\u011f\u0131 URL&#8217;ye veya bir ba\u011flant\u0131ya t\u0131klad\u0131\u011f\u0131nda olu\u015fan URL de\u011fi\u015fikli\u011fine g\u00f6re hangi React bile\u015feninin ekranda g\u00f6sterilece\u011fini belirler.<\/p>\n<h3>Temel Konseptler ve Neden React Router?<\/h3>\n<p>React Router&#8217;\u0131n merkezinde birka\u00e7 anahtar bile\u015fen ve konsept bulunur:<br \/>\n*   <strong>Router<\/strong>: Uygulaman\u0131z\u0131n tamam\u0131n\u0131 sarmalayan ve y\u00f6nlendirme ba\u011flam\u0131n\u0131 sa\u011flayan ana bile\u015fendir (\u00f6rne\u011fin <code>BrowserRouter<\/code>).<br \/>\n*   <strong>Route<\/strong>: Belirli bir URL yolunu (path) bir React bile\u015feniyle e\u015fle\u015ftiren bile\u015fendir.<br \/>\n*   <strong>Link \/ NavLink<\/strong>: Kullan\u0131c\u0131lar\u0131n farkl\u0131 rotalar aras\u0131nda gezinmesini sa\u011flayan deklaratif navigasyon bile\u015fenleridir.<br \/>\n<em>   <strong>Routes (v6) \/ Switch (v5)<\/strong>: Tan\u0131mlanm\u0131\u015f <code>Route<\/code> bile\u015fenlerini gruplayarak, mevcut URL ile e\u015fle\u015fen <\/em>ilk* rotay\u0131 render etmeyi sa\u011flayan bile\u015fenlerdir.<\/p>\n<p>React Router, bile\u015fen tabanl\u0131 yap\u0131s\u0131yla React&#8217;\u0131n felsefesine m\u00fckemmel bir \u015fekilde uyar. Deklaratif yap\u0131s\u0131 sayesinde, uygulaman\u0131z\u0131n navigasyonunu &#8220;nas\u0131l&#8221; yapaca\u011f\u0131n\u0131z\u0131 de\u011fil, &#8220;ne&#8221; yapaca\u011f\u0131n\u0131z\u0131 tan\u0131mlars\u0131n\u0131z. Bu, kodunuzu daha okunabilir, bak\u0131m\u0131 daha kolay ve hatalara kar\u015f\u0131 daha diren\u00e7li hale getirir.<\/p>\n<h3>Kurulum<\/h3>\n<p>React Router&#8217;\u0131 projenize eklemek i\u00e7in <code>npm<\/code> veya <code>yarn<\/code> kullanabilirsiniz:<br \/>\n<code>npm install react-router-dom<\/code><br \/>\nveya<br \/>\n<code>yarn add react-router-dom<\/code><\/p>\n<p><code>react-router-dom<\/code> paketi, web uygulamalar\u0131 i\u00e7in \u00f6zel olarak tasarlanm\u0131\u015f DOM ba\u011flamalar\u0131n\u0131 (<code>BrowserRouter<\/code>, <code>Link<\/code> vb.) i\u00e7erir.<\/p>\n<h2>Temel Rota Tan\u0131mlama<\/h2>\n<p>React Router ile rota tan\u0131mlaman\u0131n ilk ad\u0131m\u0131, uygulaman\u0131z\u0131 bir router bile\u015feni ile sarmalamak ve ard\u0131ndan <code>Route<\/code> bile\u015fenlerini kullanarak URL yollar\u0131n\u0131 bile\u015fenlerle e\u015fle\u015ftirmektir.<\/p>\n<h3>Router Bile\u015fenleri<\/h3>\n<p>React Router iki ana router bile\u015feni sunar:<br \/>\n*   <strong><code>BrowserRouter<\/code><\/strong>: HTML5 History API&#8217;sini kullanarak taray\u0131c\u0131 ge\u00e7mi\u015fini y\u00f6netir. URL&#8217;ler normal bir web sitesi gibi g\u00f6r\u00fcn\u00fcr (\u00f6rne\u011fin <code>example.com\/about<\/code>). Genellikle SPA&#8217;lar i\u00e7in tercih edilen y\u00f6ntemdir. Sunucunuzun, t\u00fcm istekleri uygulaman\u0131z\u0131n ana HTML dosyas\u0131na y\u00f6nlendirecek \u015fekilde yap\u0131land\u0131r\u0131lmas\u0131 gerekir (client-side routing).<br \/>\n*   <strong><code>HashRouter<\/code><\/strong>: URL&#8217;lerde hash (<code>#<\/code>) kullan\u0131r (\u00f6rne\u011fin <code>example.com\/#\/about<\/code>). Bu, sunucu yap\u0131land\u0131rmas\u0131 gerektirmeyen daha basit bir yakla\u015f\u0131md\u0131r, ancak URL&#8217;ler daha az estetik g\u00f6r\u00fcnebilir ve SEO a\u00e7\u0131s\u0131ndan baz\u0131 dezavantajlar\u0131 olabilir.<\/p>\n<p>\u00c7o\u011fu modern React uygulamas\u0131nda <code>BrowserRouter<\/code> tercih edilir. Uygulaman\u0131z\u0131n ana bile\u015fenini (genellikle <code>App.js<\/code> veya <code>index.js<\/code> i\u00e7indeki <code>App<\/code> bile\u015feni) bir <code>BrowserRouter<\/code> i\u00e7ine alarak y\u00f6nlendirme ba\u011flam\u0131n\u0131 sa\u011flars\u0131n\u0131z:<\/p>\n<pre><code class=\"language-javascript\">import React from 'react';\nimport ReactDOM from 'react-dom\/client';\nimport { BrowserRouter } from 'react-router-dom';\nimport App from '.\/App';\n\nconst root = ReactDOM.createRoot(document.getElementById('root'));\nroot.render(\n  <React.StrictMode>\n    <BrowserRouter>\n      <App \/>\n    <\/BrowserRouter>\n  <\/React.StrictMode>\n);<\/code><\/pre>\n<h3><code>Route<\/code> Bile\u015feni<\/h3>\n<p><code>Route<\/code> bile\u015feni, belirli bir URL yolu ile bir React bile\u015fenini e\u015fle\u015ftirmek i\u00e7in kullan\u0131l\u0131r.<\/p>\n<p>*   <strong><code>path<\/code> prop&#8217;u<\/strong>: E\u015fle\u015fecek URL yolunu belirtir.<br \/>\n*   <strong><code>element<\/code> prop&#8217;u (v6)<\/strong>: Yol e\u015fle\u015fti\u011finde render edilecek React bile\u015fenini al\u0131r. v5&#8217;te bu prop&#8217;lar <code>component<\/code> (bile\u015fenin kendisini al\u0131r) veya <code>render<\/code> (bir fonksiyon al\u0131r ve render edilecek JSX&#8217;i d\u00f6nd\u00fcr\u00fcr) idi. v6, bu karma\u015f\u0131kl\u0131\u011f\u0131 ortadan kald\u0131rarak yaln\u0131zca <code>element<\/code> prop&#8217;unu kullan\u0131r.<\/p>\n<p>\u00d6rnek kullan\u0131m:<\/p>\n<pre><code class=\"language-javascript\">\/\/ App.js\nimport React from 'react';\nimport { Routes, Route } from 'react-router-dom';\nimport HomePage from '.\/pages\/HomePage';\nimport AboutPage from '.\/pages\/AboutPage';\nimport ContactPage from '.\/pages\/ContactPage';\n\nfunction App() {\n  return (\n    <Routes>\n      <Route path=\"\/\" element={<HomePage \/>} \/>\n      <Route path=\"\/about\" element={<AboutPage \/>} \/>\n      <Route path=\"\/contact\" element={<ContactPage \/>} \/>\n    <\/Routes>\n  );\n}\nexport default App;<\/code><\/pre>\n<h3><code>Routes<\/code> Bile\u015feni (v6) \/ <code>Switch<\/code> Bile\u015feni (v5)<\/h3>\n<p>Uygulaman\u0131zda birden fazla <code>Route<\/code> tan\u0131mland\u0131\u011f\u0131nda, mevcut URL ile birden fazla rota e\u015fle\u015febilir. \u00d6rne\u011fin, <code>\/about<\/code> yolu hem <code>path=\"\/\" <\/code> ile hem de <code>path=\"\/about\"<\/code> ile e\u015fle\u015febilir. Bu durumu \u00f6nlemek ve sadece <em>en iyi e\u015fle\u015fen tek bir rotay\u0131<\/em> render etmek i\u00e7in <code>Routes<\/code> (v6) veya <code>Switch<\/code> (v5) bile\u015fenleri kullan\u0131l\u0131r.<\/p>\n<p>*   <strong><code>Routes<\/code> (v6)<\/strong>: <code>Routes<\/code> bile\u015feni, \u00e7ocuklar\u0131 olarak tan\u0131mlanan t\u00fcm <code>Route<\/code>&#8216;lar\u0131 tarar ve URL ile e\u015fle\u015fen ilk <code>Route<\/code>&#8216;u render eder. v6&#8217;da <code>exact<\/code> prop&#8217;una art\u0131k ihtiya\u00e7 yoktur; <code>Routes<\/code> varsay\u0131lan olarak en spesifik e\u015fle\u015fmeyi se\u00e7er.<br \/>\n*   <strong><code>Switch<\/code> (v5)<\/strong>: Ayn\u0131 i\u015flevi g\u00f6r\u00fcrd\u00fc ancak <code>exact<\/code> prop&#8217;u olmadan, <code>\/<\/code> yolu <code>\/about<\/code> yolundan \u00f6nce tan\u0131mlan\u0131rsa, <code>\/about<\/code> yerine <code>\/<\/code> yolunun bile\u015feni render edilirdi. Bu nedenle v5&#8217;te <code>exact<\/code> prop&#8217;u s\u0131k\u00e7a kullan\u0131l\u0131rd\u0131: <code><Route exact path=\"\/\" component={HomePage} \/><\/code>.<\/p>\n<p><code>Routes<\/code> bile\u015feninin kullan\u0131lmas\u0131, uygulaman\u0131z\u0131n navigasyon mant\u0131\u011f\u0131n\u0131 daha \u00f6ng\u00f6r\u00fclebilir ve kontrol edilebilir hale getirir.<\/p>\n<h2>Dinamik Rotlar ve Parametreler<\/h2>\n<p>\u00c7o\u011fu zaman, bir uygulaman\u0131n ayn\u0131 sayfa d\u00fczenini kullanarak farkl\u0131 i\u00e7erikleri g\u00f6stermesi gerekir. \u00d6rne\u011fin, bir e-ticaret sitesinde her \u00fcr\u00fcn\u00fcn kendi detay sayfas\u0131 vard\u0131r, ancak bu sayfalar\u0131n yap\u0131s\u0131 genellikle ayn\u0131d\u0131r. Bu gibi durumlar i\u00e7in React Router, dinamik rotalar\u0131 ve URL parametrelerini destekler.<\/p>\n<h3>URL Parametreleri<\/h3>\n<p>URL parametreleri, rotan\u0131n bir par\u00e7as\u0131 olarak de\u011fi\u015fken verileri yakalamak i\u00e7in kullan\u0131l\u0131r. <code>path<\/code> prop&#8217;unda iki nokta \u00fcst \u00fcste (<code>:<\/code>) ile belirtilirler.<br \/>\n\u00d6rnek: <code>path=\"\/products\/:id\"<\/code> burada <code>:id<\/code> bir parametredir.<\/p>\n<p>Bu parametrelere, bile\u015fen i\u00e7inde <code>useParams<\/code> hook&#8217;u (v6) arac\u0131l\u0131\u011f\u0131yla eri\u015filebilir.<\/p>\n<pre><code class=\"language-javascript\">import React from 'react';\nimport { useParams } from 'react-router-dom';\n\nfunction ProductDetailPage() {\n  const { id } = useParams(); \/\/ URL'den id parametresini al\u0131r\n  \/\/ id'yi kullanarak \u00fcr\u00fcn verilerini \u00e7ekme veya g\u00f6sterme\n  return (\n    <div>\n      \n      <p>\u00dcr\u00fcn ID: {id}<\/p>\n      {\/<em> \u00dcr\u00fcn bilgilerini burada g\u00f6ster <\/em>\/}\n    <\/div>\n  );\n}\nexport default ProductDetailPage;<\/code><\/pre>\n<p>E\u011fer URL <code>\/products\/123<\/code> ise, <code>id<\/code> de\u011feri <code>123<\/code> olacakt\u0131r.<\/p>\n<h3>Query Parametreleri<\/h3>\n<p>URL parametrelerinden farkl\u0131 olarak, query parametreleri URL&#8217;nin sonuna soru i\u015fareti (<code>?<\/code>) ile eklenir ve anahtar-de\u011fer \u00e7iftleri \u015feklinde veri ta\u015f\u0131r (\u00f6rne\u011fin <code>?category=electronics&sort=price<\/code>). Bunlar genellikle filtreleme, arama veya sayfalama gibi iste\u011fe ba\u011fl\u0131 verileri iletmek i\u00e7in kullan\u0131l\u0131r.<\/p>\n<p>v6&#8217;da <code>useSearchParams<\/code> hook&#8217;u ile query parametrelerine eri\u015filebilir ve y\u00f6netilebilir:<\/p>\n<pre><code class=\"language-javascript\">import React from 'react';\nimport { useSearchParams } from 'react-router-dom';\n\nfunction SearchResultsPage() {\n  const [searchParams, setSearchParams] = useSearchParams();\n  const query = searchParams.get('q'); \/\/ URL'den 'q' parametresini al\u0131r\n  const category = searchParams.get('category');\n\n  \/\/ Arama sonu\u00e7lar\u0131n\u0131 query ve category'ye g\u00f6re g\u00f6sterme\n  return (\n    <div>\n      \n      <p>Arama sorgusu: {query || 'Yok'}<\/p>\n      <p>Kategori: {category || 'T\u00fcm\u00fc'}<\/p>\n      <button onClick={() => setSearchParams({ q: 'react', category: 'webdev' })}>\n        React Arama\n      <\/button>\n    <\/div>\n  );\n}\nexport default SearchResultsPage;<\/code><\/pre>\n<p><code>setSearchParams<\/code> fonksiyonu ile query parametreleri programatik olarak g\u00fcncellenebilir.<\/p>\n<h2>\u0130\u00e7 \u0130\u00e7e Rotlar (Nested Routes)<\/h2>\n<p>B\u00fcy\u00fck ve karma\u015f\u0131k uygulamalarda, bir ana sayfan\u0131n (parent route) alt\u0131nda birden fazla alt sayfa (child routes) bulunmas\u0131 yayg\u0131nd\u0131r. \u00d6rne\u011fin, bir kullan\u0131c\u0131 paneli (<code>\/dashboard<\/code>) alt\u0131nda ayarlar (<code>\/dashboard\/settings<\/code>), profil (<code>\/dashboard\/profile<\/code>) veya mesajlar (<code>\/dashboard\/messages<\/code>) gibi alt b\u00f6l\u00fcmler olabilir. Bu yap\u0131ya i\u00e7 i\u00e7e rotalar denir ve React Router bunu kolayca y\u00f6netmenizi sa\u011flar.<\/p>\n<h3>V6 Yakla\u015f\u0131m\u0131<\/h3>\n<p>React Router v6, i\u00e7 i\u00e7e rotalar\u0131 tan\u0131mlama ve render etme \u015feklini \u00f6nemli \u00f6l\u00e7\u00fcde basitle\u015ftirmi\u015ftir. Art\u0131k parent <code>Route<\/code> i\u00e7inde alt <code>Route<\/code>&#8216;lar\u0131 tan\u0131mlayabilir ve parent bile\u015fenin neresinde alt rotan\u0131n i\u00e7eri\u011finin render edilece\u011fini <code>Outlet<\/code> bile\u015feni ile belirtebilirsiniz.<\/p>\n<pre><code class=\"language-javascript\">\/\/ App.js\nimport React from 'react';\nimport { Routes, Route } from 'react-router-dom';\nimport HomePage from '.\/pages\/HomePage';\nimport DashboardLayout from '.\/pages\/DashboardLayout'; \/\/ Parent bile\u015fen\nimport DashboardSettings from '.\/pages\/DashboardSettings';\nimport DashboardProfile from '.\/pages\/DashboardProfile';\n\nfunction App() {\n  return (\n    <Routes>\n      <Route path=\"\/\" element={<HomePage \/>} \/>\n      <Route path=\"\/dashboard\" element={<DashboardLayout \/>}>\n        {\/<em> \u0130\u00e7 i\u00e7e rotalar burada tan\u0131mlan\u0131r <\/em>\/}\n        <Route path=\"settings\" element={<DashboardSettings \/>} \/> {\/<em> G\u00f6receli yol <\/em>\/}\n        <Route path=\"profile\" element={<DashboardProfile \/>} \/>   {\/<em> G\u00f6receli yol <\/em>\/}\n        <Route index element={<h3>Dashboard Ana Sayfa<\/h3>} \/> {\/<em> '\/dashboard' i\u00e7in varsay\u0131lan alt rota <\/em>\/}\n      <\/Route>\n    <\/Routes>\n  );\n}\nexport default App;\n\n\/\/ pages\/DashboardLayout.js\nimport React from 'react';\nimport { Outlet, Link } from 'react-router-dom';\n\nfunction DashboardLayout() {\n  return (\n    <div>\n      <h2>Dashboard<\/h2>\n      <nav>\n        <Link to=\"\/dashboard\">Genel Bak\u0131\u015f<\/Link> |{' '}\n        <Link to=\"settings\">Ayarlar<\/Link> |{' '} {\/<em> G\u00f6receli Link <\/em>\/}\n        <Link to=\"profile\">Profil<\/Link>       {\/<em> G\u00f6receli Link <\/em>\/}\n      <\/nav>\n      <hr \/>\n      <Outlet \/> {\/<em> Alt rotan\u0131n i\u00e7eri\u011fi burada render edilecek <\/em>\/}\n    <\/div>\n  );\n}\nexport default DashboardLayout;<\/code><\/pre>\n<p>Bu \u00f6rnekte, <code>\/dashboard\/settings<\/code> ve <code>\/dashboard\/profile<\/code> rotalar\u0131 <code>DashboardLayout<\/code> bile\u015feninin i\u00e7inde render edilir. <code>Outlet<\/code> bile\u015feni, parent rotan\u0131n alt rotalar\u0131 i\u00e7in bir yer tutucu g\u00f6revi g\u00f6r\u00fcr. <code>index<\/code> prop&#8217;u, parent rotan\u0131n tam olarak e\u015fle\u015fti\u011finde (\u00f6rne\u011fin <code>\/dashboard<\/code>) g\u00f6sterilecek varsay\u0131lan alt rotay\u0131 belirtir. <code>Link<\/code> bile\u015fenindeki <code>to<\/code> prop&#8217;unda g\u00f6receli yollar (<code>settings<\/code>, <code>profile<\/code>) kullan\u0131ld\u0131\u011f\u0131na dikkat edin; bu, parent rotan\u0131n yoluna g\u00f6re otomatik olarak \u00e7\u00f6z\u00fcmlenir.<\/p>\n<h2>Programatik Navigasyon<\/h2>\n<p>Kullan\u0131c\u0131lar\u0131n bir ba\u011flant\u0131ya t\u0131klamas\u0131yla (deklaratif navigasyon) rotalar aras\u0131nda gezinmek yayg\u0131n olsa da, bazen bir form g\u00f6nderimi, bir API \u00e7a\u011fr\u0131s\u0131 sonras\u0131 veya belirli bir ko\u015fulun sa\u011flanmas\u0131 gibi durumlarda programatik olarak y\u00f6nlendirme yapmak gerekebilir.<\/p>\n<h3><code>Link<\/code> ve <code>NavLink<\/code><\/h3>\n<p>Bu bile\u015fenler, kullan\u0131c\u0131lar\u0131n uygulaman\u0131z i\u00e7inde gezinmesi i\u00e7in standart HTML <code><a><\/code> etiketinin React Router versiyonlar\u0131d\u0131r. Yeniden y\u00fckleme yapmadan SPA i\u00e7inde gezinmeyi sa\u011flarlar.<br \/>\n*   <strong><code>Link<\/code><\/strong>: Temel bir ba\u011flant\u0131 sa\u011flar.<br \/>\n*   <strong><code>NavLink<\/code><\/strong>: <code>Link<\/code>&#8216;in t\u00fcm \u00f6zelliklerine ek olarak, mevcut URL ile e\u015fle\u015fti\u011finde &#8220;aktif&#8221; stil veya s\u0131n\u0131f uygulama yetene\u011fine sahiptir. Bu, navigasyon men\u00fclerinde hangi \u00f6\u011fenin aktif oldu\u011funu vurgulamak i\u00e7in kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<pre><code class=\"language-javascript\">import { Link, NavLink } from 'react-router-dom';\n\nfunction Navbar() {\n  return (\n    <nav>\n      <NavLink to=\"\/\" className={({ isActive }) => isActive ? \"active-link\" : \"\"}>Ana Sayfa<\/NavLink>\n      <NavLink to=\"\/products\" className={({ isActive }) => isActive ? \"active-link\" : \"\"}>\u00dcr\u00fcnler<\/NavLink>\n      <NavLink to=\"\/dashboard\" className={({ isActive }) => isActive ? \"active-link\" : \"\"}>Dashboard<\/NavLink>\n    <\/nav>\n  );\n}<\/code><\/pre>\n<p>v6&#8217;da <code>className<\/code> ve <code>style<\/code> prop&#8217;lar\u0131na bir fonksiyon ge\u00e7irerek <code>isActive<\/code> durumuna g\u00f6re dinamik stil uygulayabilirsiniz.<\/p>\n<h3><code>useNavigate<\/code> Hook&#8217;u (v6) \/ <code>useHistory<\/code> Hook&#8217;u (v5)<\/h3>\n<p>Programatik navigasyon i\u00e7in React Router v6&#8217;da <code>useNavigate<\/code> hook&#8217;u kullan\u0131l\u0131r. Bu hook, bir fonksiyon d\u00f6nd\u00fcr\u00fcr ve bu fonksiyonu \u00e7a\u011f\u0131rarak kullan\u0131c\u0131y\u0131 belirli bir rotaya y\u00f6nlendirebilirsiniz.<\/p>\n<pre><code class=\"language-javascript\">import React from 'react';\nimport { useNavigate } from 'react-router-dom';\n\nfunction LoginForm() {\n  const navigate = useNavigate();\n\n  const handleSubmit = (event) => {\n    event.preventDefault();\n    \/\/ Form do\u011frulama ve API \u00e7a\u011fr\u0131s\u0131\n    const isAuthenticated = true; \/\/ Varsay\u0131msal do\u011frulama sonucu\n\n    if (isAuthenticated) {\n      navigate('\/dashboard', { replace: true }); \/\/ Kullan\u0131c\u0131y\u0131 dashboard'a y\u00f6nlendir, ge\u00e7mi\u015fte yerine koy\n    } else {\n      alert('Kullan\u0131c\u0131 ad\u0131 veya \u015fifre yanl\u0131\u015f!');\n    }\n  };\n\n  return (\n    <form onSubmit={handleSubmit}>\n      {\/<em> Giri\u015f alanlar\u0131 <\/em>\/}\n      <button type=\"submit\">Giri\u015f Yap<\/button>\n    <\/form>\n  );\n}\nexport default LoginForm;<\/code><\/pre>\n<p><code>navigate<\/code> fonksiyonu, ilk arg\u00fcman olarak bir yol string&#8217;i veya bir say\u0131 (geri gitmek i\u00e7in <code>-1<\/code>, ileri gitmek i\u00e7in <code>1<\/code>) alabilir. \u0130kinci arg\u00fcman olarak bir options objesi alabilir; \u00f6rne\u011fin <code>replace: true<\/code> ile mevcut giri\u015fin taray\u0131c\u0131 ge\u00e7mi\u015finde de\u011fi\u015ftirilmesini sa\u011flayabilirsiniz, bu da kullan\u0131c\u0131n\u0131n geri butonuna bast\u0131\u011f\u0131nda \u00f6nceki sayfaya de\u011fil, daha \u00f6nceki bir sayfaya gitmesini sa\u011flar (giri\u015f sayfas\u0131ndan sonra dashboard&#8217;a y\u00f6nlendirmede s\u0131k\u00e7a kullan\u0131l\u0131r).<\/p>\n<h2>Rota Koruma (Protected Routes)<\/h2>\n<p>Bir\u00e7ok uygulamada, belirli sayfalara eri\u015fimin kullan\u0131c\u0131 giri\u015fi (authentication) veya yetkilendirme (authorization) gerektirmesi gibi durumlar vard\u0131r. React Router, bu &#8220;korumal\u0131 rotalar\u0131&#8221; uygulamak i\u00e7in esnek bir yap\u0131 sunar.<\/p>\n<p>Genel yakla\u015f\u0131m, \u00f6zel bir <code>ProtectedRoute<\/code> bile\u015feni olu\u015fturmakt\u0131r. Bu bile\u015fen, kullan\u0131c\u0131n\u0131n kimlik do\u011frulama durumunu kontrol eder ve e\u011fer yetkili de\u011filse, onu giri\u015f sayfas\u0131na veya ba\u015fka bir genel sayfaya y\u00f6nlendirir.<\/p>\n<pre><code class=\"language-javascript\">import React from 'react';\nimport { Route, Navigate } from 'react-router-dom';\nimport { useAuth } from '.\/AuthContext'; \/\/ Varsay\u0131msal bir kimlik do\u011frulama ba\u011flam\u0131\n\nfunction ProtectedRoute({ children }) {\n  const { isAuthenticated } = useAuth(); \/\/ Kullan\u0131c\u0131n\u0131n giri\u015f yap\u0131p yapmad\u0131\u011f\u0131n\u0131 kontrol eder\n\n  if (!isAuthenticated) {\n    \/\/ E\u011fer kullan\u0131c\u0131 giri\u015f yapmam\u0131\u015fsa, giri\u015f sayfas\u0131na y\u00f6nlendir\n    return <Navigate to=\"\/login\" replace \/>;\n  }\n\n  \/\/ Kullan\u0131c\u0131 giri\u015f yapm\u0131\u015fsa, \u00e7ocuk bile\u015fenleri render et\n  return children;\n}\n\n\/\/ App.js i\u00e7inde kullan\u0131m\u0131:\n\/\/ <Routes>\n\/\/   <Route path=\"\/\" element={<HomePage \/>} \/>\n\/\/   <Route path=\"\/login\" element={<LoginPage \/>} \/>\n\/\/   <Route path=\"\/dashboard\" element={\n\/\/     <ProtectedRoute>\n\/\/       <DashboardPage \/>\n\/\/     <\/ProtectedRoute>\n\/\/   } \/>\n\/\/ <\/Routes><\/code><\/pre>\n<p>Bu \u00f6rnekte, <code>ProtectedRoute<\/code> bile\u015feni <code>children<\/code> prop&#8217;u arac\u0131l\u0131\u011f\u0131yla render edilecek bile\u015feni al\u0131r. <code>useAuth<\/code> hook&#8217;u (kendi olu\u015fturdu\u011funuz bir ba\u011flamdan gelebilir) kullan\u0131c\u0131n\u0131n oturum a\u00e7m\u0131\u015f olup olmad\u0131\u011f\u0131n\u0131 kontrol eder. E\u011fer oturum a\u00e7mam\u0131\u015fsa, <code>Navigate<\/code> bile\u015feni kullan\u0131c\u0131y\u0131 <code>\/login<\/code> rotas\u0131na y\u00f6nlendirir ve taray\u0131c\u0131 ge\u00e7mi\u015findeki mevcut giri\u015fi de\u011fi\u015ftirir (<code>replace<\/code>). Aksi takdirde, korunan bile\u015fen (<code>DashboardPage<\/code> gibi) render edilir.<\/p>\n<h2>404 Not Found Sayfalar\u0131<\/h2>\n<p>Kullan\u0131c\u0131n\u0131n var olmayan bir URL&#8217;ye gitmeye \u00e7al\u0131\u015ft\u0131\u011f\u0131 durumlarda, genellikle bir &#8220;404 Sayfa Bulunamad\u0131&#8221; sayfas\u0131 g\u00f6stermek istenir. React Router&#8217;da bu, <code>Routes<\/code> (v6) veya <code>Switch<\/code> (v5) i\u00e7indeki t\u00fcm rotalardan sonra bir wildcard (<code>*<\/code>) yolu tan\u0131mlanarak kolayca yap\u0131labilir. Wildcard yolu, di\u011fer t\u00fcm yollar e\u015fle\u015fmedi\u011finde devreye girer.<\/p>\n<pre><code class=\"language-javascript\">\/\/ App.js\nimport React from 'react';\nimport { Routes, Route } from 'react-router-dom';\nimport HomePage from '.\/pages\/HomePage';\nimport AboutPage from '.\/pages\/AboutPage';\nimport NotFoundPage from '.\/pages\/NotFoundPage';\n\nfunction App() {\n  return (\n    <Routes>\n      <Route path=\"\/\" element={<HomePage \/>} \/>\n      <Route path=\"\/about\" element={<AboutPage \/>} \/>\n      {\/<em> T\u00fcm di\u011fer rotalar e\u015fle\u015fmedi\u011finde bu rota devreye girer <\/em>\/}\n      <Route path=\"*\" element={<NotFoundPage \/>} \/>\n    <\/Routes>\n  );\n}\nexport default App;<\/code><\/pre>\n<p><code>NotFoundPage<\/code> bile\u015feni, kullan\u0131c\u0131n\u0131n arad\u0131\u011f\u0131 sayfan\u0131n bulunamad\u0131\u011f\u0131n\u0131 bildiren bir mesaj i\u00e7erecektir.<\/p>\n<h2>Geli\u015fmi\u015f Rota Yap\u0131land\u0131rmalar\u0131 ve \u0130pu\u00e7lar\u0131<\/h2>\n<p>React Router, b\u00fcy\u00fck ve karma\u015f\u0131k uygulamalar i\u00e7in daha da optimize edilmi\u015f yap\u0131land\u0131rmalar ve performans iyile\u015ftirmeleri sunar.<\/p>\n<h3>Rota Konfig\u00fcrasyonunu Harici Bir Dosyada Y\u00f6netme<\/h3>\n<p>Uygulaman\u0131z b\u00fcy\u00fcd\u00fck\u00e7e, t\u00fcm rotalar\u0131 <code>App.js<\/code> i\u00e7inde tan\u0131mlamak karma\u015f\u0131k hale gelebilir. Rota tan\u0131mlar\u0131n\u0131 ayr\u0131 bir JavaScript dosyas\u0131nda (\u00f6rne\u011fin <code>routes.js<\/code>) bir dizi obje olarak tutmak, okunabilirli\u011fi ve y\u00f6netilebilirli\u011fi art\u0131r\u0131r.<\/p>\n<pre><code class=\"language-javascript\">\/\/ routes.js\nimport HomePage from '.\/pages\/HomePage';\nimport AboutPage from '.\/pages\/AboutPage';\nimport ProductDetailPage from '.\/pages\/ProductDetailPage';\nimport NotFoundPage from '.\/pages\/NotFoundPage';\n\nconst routes = [\n  {\n    path: '\/',\n    element: <HomePage \/>,\n    exact: true, \/\/ v5'ten kalan bir al\u0131\u015fkanl\u0131k, v6'da gereksiz\n  },\n  {\n    path: '\/about',\n    element: <AboutPage \/>,\n  },\n  {\n    path: '\/products\/:id',\n    element: <ProductDetailPage \/>,\n  },\n  {\n    path: '*',\n    element: <NotFoundPage \/>,\n  },\n];\n\nexport default routes;\n\n\/\/ App.js\nimport React from 'react';\nimport { Routes, Route } from 'react-router-dom';\nimport appRoutes from '.\/routes'; \/\/ Rota yap\u0131land\u0131rmas\u0131n\u0131 import et\n\nfunction App() {\n  return (\n    <Routes>\n      {appRoutes.map((route, index) => (\n        <Route key={index} path={route.path} element={route.element} \/>\n      ))}\n    <\/Routes>\n  );\n}\nexport default App;<\/code><\/pre>\n<p>Bu yakla\u015f\u0131m, rotalar\u0131 daha mod\u00fcler hale getirir ve dinamik olarak olu\u015fturman\u0131za olanak tan\u0131r.<\/p>\n<h3>Code Splitting (Kod B\u00f6l\u00fcnmesi) ve Lazy Loading<\/h3>\n<p>B\u00fcy\u00fck uygulamalarda, t\u00fcm bile\u015fenleri ba\u015flang\u0131\u00e7ta y\u00fcklemek uygulaman\u0131n a\u00e7\u0131l\u0131\u015f s\u00fcresini uzatabilir. React&#8217;\u0131n <code>React.lazy<\/code> ve <code>Suspense<\/code> \u00f6zellikleri ile React Router&#8217;\u0131 birle\u015ftirerek, yaln\u0131zca bir rota ziyaret edildi\u011finde ilgili bile\u015fenleri dinamik olarak y\u00fckleyebilirsiniz. Bu, &#8220;lazy loading&#8221; veya &#8220;code splitting&#8221; olarak bilinir ve performans\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131r.<\/p>\n<pre><code class=\"language-javascript\">import React, { lazy, Suspense } from 'react';\nimport { Routes, Route } from 'react-router-dom';\n\nconst HomePage = lazy(() => import('.\/pages\/HomePage'));\nconst AboutPage = lazy(() => import('.\/pages\/AboutPage'));\nconst ProductDetailPage = lazy(() => import('.\/pages\/ProductDetailPage'));\nconst NotFoundPage = lazy(() => import('.\/pages\/NotFoundPage'));\n\nfunction App() {\n  return (\n    <Suspense fallback={<div>Y\u00fckleniyor...<\/div>}>\n      <Routes>\n        <Route path=\"\/\" element={<HomePage \/>} \/>\n        <Route path=\"\/about\" element={<AboutPage \/>} \/>\n        <Route path=\"\/products\/:id\" element={<ProductDetailPage \/>} \/>\n        <Route path=\"*\" element={<NotFoundPage \/>} \/>\n      <\/Routes>\n    <\/Suspense>\n  );\n}\nexport default App;<\/code><\/pre>\n<p><code>Suspense<\/code> bile\u015feni, lazy y\u00fcklenen bir bile\u015fen y\u00fcklenirken g\u00f6sterilecek bir yedek (fallback) i\u00e7erik sa\u011flar.<\/p>\n<h3>Scroll Restorasyonu<\/h3>\n<p>Taray\u0131c\u0131lar, kullan\u0131c\u0131 bir sayfada a\u015fa\u011f\u0131 kayd\u0131rd\u0131ktan sonra geri tu\u015funa bast\u0131\u011f\u0131nda, genellikle \u00f6nceki sayfadaki kayd\u0131rma konumunu hat\u0131rlar. Ancak SPA&#8217;larda bu davran\u0131\u015f bazen bozulabilir. React Router v6.4+&#8217;da <code>useScrollRestoration<\/code> hook&#8217;u ile bu durumu d\u00fczeltebilirsiniz. Daha eski versiyonlarda veya \u00f6zel ihtiya\u00e7lar\u0131n\u0131z i\u00e7in <code>useEffect<\/code> kullanarak her rota de\u011fi\u015fiminde sayfan\u0131n en \u00fcst\u00fcne kayd\u0131rma gibi manuel \u00e7\u00f6z\u00fcmler uygulayabilirsiniz.<\/p>\n<pre><code class=\"language-javascript\">import { useEffect } from 'react';\nimport { useLocation } from 'react-router-dom';\n\nfunction ScrollToTop() {\n  const { pathname } = useLocation();\n\n  useEffect(() => {\n    window.scrollTo(0, 0);\n  }, [pathname]); \/\/ pathname de\u011fi\u015fti\u011finde en \u00fcste kayd\u0131r\n\n  return null;\n}\n\n\/\/ App.js i\u00e7inde:\n\/\/ <BrowserRouter>\n\/\/   <ScrollToTop \/>\n\/\/   <App \/>\n\/\/ <\/BrowserRouter><\/code><\/pre>\n<h3>Error Boundaries<\/h3>\n<p>Bazen rota bile\u015fenleri i\u00e7inde beklenmedik hatalar olu\u015fabilir. Bu hatalar\u0131n t\u00fcm uygulaman\u0131z\u0131 \u00e7\u00f6kertmesini \u00f6nlemek i\u00e7in React&#8217;\u0131n <code>Error Boundaries<\/code> mekanizmas\u0131n\u0131 kullanabilirsiniz. Bir <code>ErrorBoundary<\/code> bile\u015feni olu\u015fturarak, rotalar\u0131n \u00e7evresini sarabilir ve herhangi bir hata olu\u015ftu\u011funda yedek bir UI g\u00f6sterebilirsiniz.<\/p>\n<h2>React Router v5&#8217;ten v6&#8217;ya Ge\u00e7i\u015f<\/h2>\n<p>React Router v6, k\u00fct\u00fcphanenin API&#8217;sinde \u00f6nemli basitle\u015ftirmeler ve performans iyile\u015ftirmeleri getirdi. Temel de\u011fi\u015fiklikler \u015funlard\u0131r:<br \/>\n*   <strong><code>Switch<\/code> yerine <code>Routes<\/code><\/strong>: <code>Routes<\/code> daha g\u00fc\u00e7l\u00fc ve daha sezgisel bir e\u015fle\u015fme algoritmas\u0131na sahiptir.<br \/>\n*   <strong><code>component<\/code> ve <code>render<\/code> yerine <code>element<\/code><\/strong>: <code>Route<\/code> bile\u015fenleri art\u0131k render edilecek JSX&#8217;i do\u011frudan <code>element<\/code> prop&#8217;u ile al\u0131r.<br \/>\n*   <strong><code>useHistory<\/code> yerine <code>useNavigate<\/code><\/strong>: Programatik navigasyon i\u00e7in yeni hook.<br \/>\n*   <strong><code>exact<\/code> prop&#8217;u kald\u0131r\u0131ld\u0131<\/strong>: <code>Routes<\/code> bile\u015feni varsay\u0131lan olarak en iyi e\u015fle\u015fmeyi buldu\u011fu i\u00e7in <code>exact<\/code>&#8216;a gerek kalmad\u0131.<br \/>\n*   <strong>\u0130\u00e7 i\u00e7e rotalar basitle\u015ftirildi<\/strong>: <code>Outlet<\/code> bile\u015feni ve parent <code>Route<\/code> i\u00e7inde alt <code>Route<\/code> tan\u0131mlama ile daha temiz bir yap\u0131.<br \/>\n*   <strong>G\u00f6receli yollar<\/strong>: <code>Link<\/code> ve <code>Route<\/code> path&#8217;lerinde g\u00f6receli yollar kullanma yetene\u011fi.<\/p>\n<p>Bu de\u011fi\u015fiklikler, React Router&#8217;\u0131 daha modern React uygulamalar\u0131na uygun hale getirmi\u015f ve geli\u015ftirici deneyimini iyile\u015ftirmi\u015ftir. Mevcut v5 projelerinin v6&#8217;ya y\u00fckseltilmesi, bu temel de\u011fi\u015fiklikleri anlamay\u0131 gerektirir.<\/p>\n<h2>Sonu\u00e7<\/h2>\n<p>React Router, React uygulamalar\u0131nda g\u00fc\u00e7l\u00fc, esnek ve deklaratif bir y\u00f6nlendirme \u00e7\u00f6z\u00fcm\u00fc sunar. Bu makalede ele al\u0131nan temel ve ileri d\u00fczey konular, uygulaman\u0131z\u0131n navigasyon yap\u0131s\u0131n\u0131 verimli bir \u015fekilde tasarlaman\u0131z ve y\u00f6netmeniz i\u00e7in gerekli bilgi ve ara\u00e7lar\u0131 sa\u011flamaktad\u0131r. Rota tan\u0131mlamadan dinamik verilere, i\u00e7 i\u00e7e rotalardan programatik y\u00f6nlendirmeye, rota korumadan performans optimizasyonlar\u0131na kadar React Router&#8217;\u0131n sundu\u011fu geni\u015f yelpazeyi anlamak, kullan\u0131c\u0131 dostu ve bak\u0131m\u0131 kolay web uygulamalar\u0131 geli\u015ftirmenin anahtar\u0131d\u0131r.<\/p>\n<p>Do\u011fru rota haritaland\u0131rmas\u0131, yaln\u0131zca uygulaman\u0131z\u0131n teknik mimarisi i\u00e7in de\u011fil, ayn\u0131 zamanda kullan\u0131c\u0131 deneyimi ve uygulaman\u0131z\u0131n genel ba\u015far\u0131s\u0131 i\u00e7in de kritik \u00f6neme sahiptir. React Router&#8217;\u0131n s\u00fcrekli geli\u015fen yap\u0131s\u0131 ve g\u00fc\u00e7l\u00fc topluluk deste\u011fi sayesinde, modern web geli\u015ftirmenin dinamik ihtiya\u00e7lar\u0131na her zaman cevap verebilecek bir \u00e7\u00f6z\u00fcm elinizin alt\u0131nda olacakt\u0131r. Bu rehberin, React Router ile rota haritaland\u0131rma konusunda size sa\u011flam bir temel olu\u015fturdu\u011funu umuyoruz.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"React Router&#8217;da Rota Haritaland\u0131rma: Kapsaml\u0131 Bir Rehber\nGiri\u015f\nModern web uygulamalar\u0131, \u00f6zellikle Single-Page Application (SPA) mimarisiyle geli","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-36818","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 Router&#039;da Rota Haritaland\u0131rma: Kapsaml\u0131 Bir Rehber - 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-routerda-rota-haritalandirma-kapsamli-bir-rehber\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"React Router&#039;da Rota Haritaland\u0131rma: Kapsaml\u0131 Bir Rehber\" \/>\n<meta property=\"og:description\" content=\"React Router&#039;da Rota Haritaland\u0131rma: Kapsaml\u0131 Bir Rehber Giri\u015f Modern web uygulamalar\u0131, \u00f6zellikle Single-Page Application (SPA) mimarisiyle geli\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/react-routerda-rota-haritalandirma-kapsamli-bir-rehber\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-23T11:41:13+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=\"16 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/react-routerda-rota-haritalandirma-kapsamli-bir-rehber\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/react-routerda-rota-haritalandirma-kapsamli-bir-rehber\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"React Router&#8217;da Rota Haritaland\u0131rma: Kapsaml\u0131 Bir Rehber\",\"datePublished\":\"2025-12-23T11:41:13+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/react-routerda-rota-haritalandirma-kapsamli-bir-rehber\/\"},\"wordCount\":2331,\"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-routerda-rota-haritalandirma-kapsamli-bir-rehber\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/react-routerda-rota-haritalandirma-kapsamli-bir-rehber\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/react-routerda-rota-haritalandirma-kapsamli-bir-rehber\/\",\"name\":\"React Router'da Rota Haritaland\u0131rma: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-12-23T11:41:13+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/react-routerda-rota-haritalandirma-kapsamli-bir-rehber\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/react-routerda-rota-haritalandirma-kapsamli-bir-rehber\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/react-routerda-rota-haritalandirma-kapsamli-bir-rehber\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"React Router&#8217;da Rota Haritaland\u0131rma: Kapsaml\u0131 Bir Rehber\"}]},{\"@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 Router'da Rota Haritaland\u0131rma: Kapsaml\u0131 Bir Rehber - 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-routerda-rota-haritalandirma-kapsamli-bir-rehber\/","og_locale":"tr_TR","og_type":"article","og_title":"React Router'da Rota Haritaland\u0131rma: Kapsaml\u0131 Bir Rehber","og_description":"React Router'da Rota Haritaland\u0131rma: Kapsaml\u0131 Bir Rehber Giri\u015f Modern web uygulamalar\u0131, \u00f6zellikle Single-Page Application (SPA) mimarisiyle geli","og_url":"https:\/\/fatihsoysal.com\/blog\/react-routerda-rota-haritalandirma-kapsamli-bir-rehber\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-12-23T11:41:13+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"16 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/react-routerda-rota-haritalandirma-kapsamli-bir-rehber\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/react-routerda-rota-haritalandirma-kapsamli-bir-rehber\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"React Router&#8217;da Rota Haritaland\u0131rma: Kapsaml\u0131 Bir Rehber","datePublished":"2025-12-23T11:41:13+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/react-routerda-rota-haritalandirma-kapsamli-bir-rehber\/"},"wordCount":2331,"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-routerda-rota-haritalandirma-kapsamli-bir-rehber\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/react-routerda-rota-haritalandirma-kapsamli-bir-rehber\/","url":"https:\/\/fatihsoysal.com\/blog\/react-routerda-rota-haritalandirma-kapsamli-bir-rehber\/","name":"React Router'da Rota Haritaland\u0131rma: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-12-23T11:41:13+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/react-routerda-rota-haritalandirma-kapsamli-bir-rehber\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/react-routerda-rota-haritalandirma-kapsamli-bir-rehber\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/react-routerda-rota-haritalandirma-kapsamli-bir-rehber\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"React Router&#8217;da Rota Haritaland\u0131rma: Kapsaml\u0131 Bir Rehber"}]},{"@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\/36818","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=36818"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/36818\/revisions"}],"predecessor-version":[{"id":36819,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/36818\/revisions\/36819"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=36818"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=36818"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=36818"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}