{"id":32518,"date":"2025-10-22T19:32:43","date_gmt":"2025-10-22T16:32:43","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/react-router-v6-ile-paralel-yonlendirme-nasil-eklenir-parallel-router-tanitimi-%f0%9f%9a%80\/"},"modified":"2025-10-22T19:32:43","modified_gmt":"2025-10-22T16:32:43","slug":"react-router-v6-ile-paralel-yonlendirme-nasil-eklenir-parallel-router-tanitimi-%f0%9f%9a%80","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/react-router-v6-ile-paralel-yonlendirme-nasil-eklenir-parallel-router-tanitimi-%f0%9f%9a%80\/","title":{"rendered":"React Router v6 ile Paralel Y\u00f6nlendirme Nas\u0131l Eklenir? parallel-router Tan\u0131t\u0131m\u0131 \ud83d\ude80"},"content":{"rendered":"<p><body><\/p>\n<p>React uygulamalar\u0131n\u0131zda karma\u015f\u0131k UI yap\u0131lar\u0131n\u0131 y\u00f6netirken kar\u015f\u0131la\u015ft\u0131\u011f\u0131n\u0131z zorluklara modern bir \u00e7\u00f6z\u00fcm m\u00fc ar\u0131yorsunuz? <code>parallel-router<\/code> ile React Router v6&#8217;ya paralel y\u00f6nlendirme \u00f6zelli\u011fini nas\u0131l entegre edebilece\u011finizi ad\u0131m ad\u0131m ke\u015ffedin. Kullan\u0131c\u0131 deneyimini d\u00f6n\u00fc\u015ft\u00fcren bu yeni yakla\u015f\u0131mla performans\u0131n\u0131z\u0131 art\u0131r\u0131n ve uygulaman\u0131z\u0131n mimarisini basitle\u015ftirin.<\/p>\n<p>G\u00fcn\u00fcm\u00fcz web uygulamalar\u0131, \u00f6zellikle Single Page Application (SPA) mimarisini benimseyenler, kullan\u0131c\u0131lar\u0131na zengin ve etkile\u015fimli deneyimler sunma hedefindedir. Bu durum, uygulamalar\u0131n kullan\u0131c\u0131 aray\u00fczlerinin (UI) giderek daha karma\u015f\u0131k hale gelmesine yol a\u00e7maktad\u0131r. Bir e-ticaret sitesinde \u00fcr\u00fcn detaylar\u0131 sayfas\u0131nda gezinirken, ayn\u0131 zamanda sepetinize ekledi\u011finiz \u00fcr\u00fcnleri k\u00fc\u00e7\u00fck bir modal pencerede g\u00f6rmek veya bir y\u00f6netim panelinde ana verileri g\u00f6r\u00fcnt\u00fclerken, yan taraftaki bir bildirim panelini veya ayarlar men\u00fcs\u00fcn\u00fc a\u00e7mak gibi senaryolar art\u0131k standart beklentiler aras\u0131na girmi\u015ftir. Geleneksel y\u00f6nlendirme \u00e7\u00f6z\u00fcmleri, bu t\u00fcr paralel veya e\u015f zamanl\u0131 UI yap\u0131lar\u0131n\u0131 y\u00f6netmekte zorlanabilir.<\/p>\n<p>React ekosisteminde y\u00f6nlendirme denilince akla ilk gelen k\u00fct\u00fcphane \u015f\u00fcphesiz React Router&#8217;d\u0131r. React Router v6, kanca tabanl\u0131 API&#8217;leri, i\u00e7 i\u00e7e y\u00f6nlendirme (nested routes) yetenekleri ve performans odakl\u0131 optimizasyonlar\u0131 ile geli\u015ftiricilere olduk\u00e7a g\u00fc\u00e7l\u00fc ara\u00e7lar sunmaktad\u0131r. Ancak, React Router&#8217;\u0131n geleneksel yakla\u015f\u0131m\u0131, genellikle &#8220;bir URL, bir bile\u015fen&#8221; prensibine dayan\u0131r. Bu prensip, uygulaman\u0131n farkl\u0131 b\u00f6l\u00fcmlerinin ayn\u0131 URL \u00fczerinde birbirinden ba\u011f\u0131ms\u0131z olarak g\u00f6r\u00fcnt\u00fclendi\u011fi veya etkile\u015fime girdi\u011fi durumlar i\u00e7in yetersiz kalabilmektedir. \u00d6rne\u011fin, bir ana i\u00e7erik alan\u0131n\u0131n yan\u0131 s\u0131ra, URL&#8217;ye ba\u011fl\u0131 olarak a\u00e7\u0131lan bir modal veya bir yan panel gibi &#8220;slot&#8221;lara sahip olmak istedi\u011finizde, React Router v6&#8217;n\u0131n do\u011fal yap\u0131s\u0131nda bu i\u015flevselli\u011fi direkt olarak sunan bir mekanizma bulunmamaktad\u0131r. Bu t\u00fcr durumlar genellikle karma\u015f\u0131k state y\u00f6netimi, ko\u015fullu renderlama veya URL parametrelerini manuel olarak ayr\u0131\u015ft\u0131rma gibi ek \u00e7\u00f6z\u00fcmler gerektirir ki, bu da kod karma\u015f\u0131kl\u0131\u011f\u0131n\u0131 ve geli\u015ftirme s\u00fcresini art\u0131r\u0131r.<\/p>\n<p>\u0130\u015fte tam da bu noktada, <code>parallel-router<\/code> gibi k\u00fct\u00fcphaneler devreye girer. <code>parallel-router<\/code>&#8216;\u0131n temel motivasyonu, React Router v6&#8217;n\u0131n \u00fczerine in\u015fa ederek, ona &#8220;paralel y\u00f6nlendirme&#8221; yetene\u011fi kazand\u0131rmakt\u0131r. Bu sayede, uygulaman\u0131z\u0131n farkl\u0131 b\u00f6lgelerine (slotlar\u0131na) ayn\u0131 anda ve birbirinden ba\u011f\u0131ms\u0131z olarak bile\u015fenler render edebilir, her bir slot i\u00e7in ayr\u0131 ayr\u0131 y\u00f6nlendirme kurallar\u0131 tan\u0131mlayabilirsiniz. Bu yakla\u015f\u0131m, \u00f6zellikle b\u00fcy\u00fck \u00f6l\u00e7ekli ve \u00e7ok mod\u00fcll\u00fc uygulamalarda (\u00f6rne\u011fin, bir CRM paneli, SaaS uygulamalar\u0131 veya karma\u015f\u0131k dashboard&#8217;lar) geli\u015ftirici deneyimini \u00f6nemli \u00f6l\u00e7\u00fcde iyile\u015ftirir ve kod taban\u0131n\u0131 daha d\u00fczenli hale getirir. Kullan\u0131c\u0131lar a\u00e7\u0131s\u0131ndan ise, daha ak\u0131c\u0131, kesintisiz ve daha h\u0131zl\u0131 bir deneyim anlam\u0131na gelir. Uygulaman\u0131z\u0131n temel ak\u0131\u015f\u0131 bozulmadan ek bilgilerin veya i\u015flevlerin g\u00f6r\u00fcnt\u00fclenebilmesi, \u00f6zellikle i\u015f kritik uygulamalarda verimlili\u011fi art\u0131r\u0131r. Geleneksel y\u00f6ntemlerle bu t\u00fcr bir yap\u0131y\u0131 kurmaya \u00e7al\u0131\u015fmak, \u00e7o\u011fu zaman &#8220;prop drilling&#8221; sorunlar\u0131na, gereksiz yeniden renderlamalara ve genel olarak bak\u0131m\u0131 zor bir koda yol a\u00e7abilir. <code>parallel-router<\/code> ise bu sorunlara \u015f\u0131k ve deklaratif bir \u00e7\u00f6z\u00fcm sunarak, React Router v6&#8217;n\u0131n g\u00fcc\u00fcn\u00fc yeni bir boyuta ta\u015f\u0131maktad\u0131r.<\/p>\n<h2>Paralel Y\u00f6nlendirme ve React Router v6 Temelleri Nelerdir?<\/h2>\n<p>React Router v6, modern React uygulamalar\u0131nda istemci taraf\u0131 y\u00f6nlendirme i\u00e7in vazge\u00e7ilmez bir ara\u00e7 haline gelmi\u015ftir. Temel olarak, taray\u0131c\u0131n\u0131n URL&#8217;sini React bile\u015fenleriyle e\u015fle\u015ftirerek sayfa ge\u00e7i\u015fleri olu\u015fturman\u0131z\u0131 sa\u011flar. <code>BrowserRouter<\/code>, <code>Routes<\/code> ve <code>Route<\/code> gibi bile\u015fenler, uygulaman\u0131z\u0131n hangi URL&#8217;de hangi i\u00e7eri\u011fi g\u00f6sterece\u011fini tan\u0131mlaman\u0131z i\u00e7in ana yap\u0131 ta\u015flar\u0131d\u0131r. \u00d6rne\u011fin, kullan\u0131c\u0131 <code>\/hakkimizda<\/code> adresine gitti\u011finde, <code>Hakkimizda<\/code> bile\u015feninin render edilmesini bu yap\u0131lar arac\u0131l\u0131\u011f\u0131yla kolayca sa\u011flayabiliriz. Ayr\u0131ca, <code>useNavigate<\/code> kancas\u0131 ile programatik olarak y\u00f6nlendirme yapabilir, <code>useParams<\/code> ile URL&#8217;den dinamik verileri \u00e7ekebilir ve <code>Outlet<\/code> ile i\u00e7 i\u00e7e (nested) rotalar\u0131n alt bile\u015fenlerini g\u00f6r\u00fcnt\u00fcleyebilirsiniz. Bu API&#8217;ler, bir\u00e7ok uygulaman\u0131n y\u00f6nlendirme ihtiya\u00e7lar\u0131n\u0131 ba\u015far\u0131yla kar\u015f\u0131lamaktad\u0131r.<\/p>\n<p>Ancak, geleneksel y\u00f6nlendirme modellerinin belirli s\u0131n\u0131rlamalar\u0131 vard\u0131r. Genellikle, bir URL yolu yaln\u0131zca bir ana bile\u015feni veya bir bile\u015fen hiyerar\u015fisini tetikler. Yani, <code>\/urunler\/123<\/code> gibi bir URL, <code>UrunDetay<\/code> bile\u015fenini g\u00f6sterirken, bu bile\u015fenin yan\u0131nda ayn\u0131 anda farkl\u0131 bir i\u015flevselli\u011fi (\u00f6rne\u011fin, &#8220;Sepete Ekle&#8221; modal\u0131 veya bir &#8220;\u0130lgili \u00dcr\u00fcnler&#8221; yan paneli) ba\u015fka bir URL b\u00f6l\u00fcm\u00fcnden ba\u011f\u0131ms\u0131z olarak kontrol etmek istedi\u011finizde, mevcut React Router v6 API&#8217;leri do\u011fal olarak bu esnekli\u011fi sunmaz. Geli\u015ftiriciler bu durumu a\u015fmak i\u00e7in genellikle global state y\u00f6netimi (Context API, Redux vb.), URL sorgu parametreleri veya hash tabanl\u0131 yakla\u015f\u0131mlar gibi y\u00f6ntemlere ba\u015fvururlar. Ancak bu \u00e7\u00f6z\u00fcmler, URL&#8217;nin temizli\u011fini bozabilir, state y\u00f6netimini karma\u015f\u0131kla\u015ft\u0131rabilir veya SEO a\u00e7\u0131s\u0131ndan istenmeyen durumlara yol a\u00e7abilir.<\/p>\n<p>Peki, paralel y\u00f6nlendirme tam olarak nedir? Paralel y\u00f6nlendirme, uygulaman\u0131z\u0131n ayn\u0131 anda birden fazla ba\u011f\u0131ms\u0131z kullan\u0131c\u0131 aray\u00fcz\u00fc alan\u0131n\u0131 (genellikle &#8220;slot&#8221; veya &#8220;outlet&#8221; olarak adland\u0131r\u0131l\u0131r) y\u00f6netebilmesini ifade eder. Bu slotlar\u0131n her biri, kendi ba\u015f\u0131na bir y\u00f6nlendirme mant\u0131\u011f\u0131na sahip olabilir ve URL&#8217;nin farkl\u0131 b\u00f6l\u00fcmlerine veya tamamen ba\u011f\u0131ms\u0131z olarak tepki verebilir. En basitinden, bir dashboard uygulamas\u0131nda ana i\u00e7erik, sol men\u00fc ve sa\u011f tarafta a\u00e7\u0131lan bir detay panelini d\u00fc\u015f\u00fcn\u00fcn. Sol men\u00fcdeki bir \u00f6\u011feye t\u0131klad\u0131\u011f\u0131n\u0131zda ana i\u00e7erik de\u011fi\u015firken, sa\u011fdaki detay panelinin i\u00e7eri\u011fi de ayn\u0131 anda URL&#8217;nin farkl\u0131 bir par\u00e7as\u0131na g\u00f6re g\u00fcncellenebilir veya kullan\u0131c\u0131 taraf\u0131ndan bir &#8220;a\u00e7\/kapa&#8221; d\u00fc\u011fmesiyle kontrol edilebilir. Bu sayede kullan\u0131c\u0131, ana ak\u0131\u015f\u0131ndan sapmadan ek bilgilere eri\u015febilir veya farkl\u0131 i\u015flevleri tetikleyebilir. Bu senaryolar, geleneksel i\u00e7 i\u00e7e y\u00f6nlendirme ile y\u00f6netilmesi zor veya imkans\u0131z hale gelir \u00e7\u00fcnk\u00fc i\u00e7 i\u00e7e y\u00f6nlendirme hiyerar\u015fik bir yap\u0131 kurarken, paralel y\u00f6nlendirme ayn\u0131 hiyerar\u015fi seviyesinde ba\u011f\u0131ms\u0131z dallanmalar\u0131 m\u00fcmk\u00fcn k\u0131lar.<\/p>\n<p>\u0130\u015fte <code>parallel-router<\/code> k\u00fct\u00fcphanesi tam da bu bo\u015flu\u011fu doldurmak i\u00e7in tasarlanm\u0131\u015ft\u0131r. React Router v6&#8217;n\u0131n sa\u011flam temelleri \u00fczerine in\u015fa edilen bu k\u00fct\u00fcphane, &#8220;adland\u0131r\u0131lm\u0131\u015f \u00e7\u0131k\u0131\u015flar&#8221; (named outlets) konseptini getirerek birden fazla ba\u011f\u0131ms\u0131z y\u00f6nlendirme slotu olu\u015fturman\u0131za olanak tan\u0131r. Bu, \u00f6rne\u011fin bir ana slot (main content) ve bir modal slotunu (popup pencere) ayn\u0131 URL \u00fczerinde y\u00f6netebilece\u011finiz anlam\u0131na gelir. Kullan\u0131c\u0131 <code>\/dashboard\/analiz<\/code> adresindeyken ayn\u0131 zamanda <code>\/modal\/ayarlar<\/code> path&#8217;i ile bir ayarlar modal\u0131n\u0131 a\u00e7abilir ve bu modal kapat\u0131ld\u0131\u011f\u0131nda ana URL&#8217;nin de\u011fi\u015fmemesi sa\u011flanabilir. Bu mimari, SPA&#8217;lar\u0131n sundu\u011fu zengin kullan\u0131c\u0131 deneyimini daha da ileriye ta\u015f\u0131yarak, mod\u00fcler, \u00f6l\u00e7eklenebilir ve bak\u0131m\u0131 kolay uygulamalar geli\u015ftirmenize yard\u0131mc\u0131 olur. <code>parallel-router<\/code> ile her bir paralel rota, kendi ya\u015fam d\u00f6ng\u00fcs\u00fcne sahip olur ve bu da gereksiz yeniden renderlar\u0131 \u00f6nleyerek performans optimizasyonuna katk\u0131da bulunur. B\u00f6ylece, karma\u015f\u0131k kullan\u0131c\u0131 aray\u00fczlerini y\u00f6netirken kar\u015f\u0131la\u015f\u0131lan zorluklar, \u015f\u0131k ve deklaratif bir \u00e7\u00f6z\u00fcmle a\u015f\u0131lm\u0131\u015f olur.<\/p>\n<h2>parallel-router&#8217;\u0131n Mimarisi ve \u00c7al\u0131\u015fma Prensibi: React Router v6 ile Nas\u0131l Entegre Olur?<\/h2>\n<p><code>parallel-router<\/code> k\u00fct\u00fcphanesi, React Router v6&#8217;n\u0131n temel API&#8217;lerini geni\u015fleterek, uygulamalar\u0131n\u0131za paralel y\u00f6nlendirme yetenekleri kazand\u0131rmak \u00fczere tasarlanm\u0131\u015ft\u0131r. Temel fikir, React Router&#8217;\u0131n tekil <code>Outlet<\/code> kavram\u0131n\u0131, birden fazla ve adland\u0131r\u0131lm\u0131\u015f <code>Outlet<\/code> benzeri yap\u0131larla geni\u015fletmektir. Bu sayede, URL&#8217;nin farkl\u0131 b\u00f6l\u00fcmleri veya hatta ayn\u0131 URL \u00fczerinde, uygulaman\u0131z\u0131n farkl\u0131 g\u00f6rsel &#8220;slot&#8221;lar\u0131na (yer tutucular\u0131na) ba\u011f\u0131ms\u0131z React bile\u015fenlerini render edebilirsiniz.<\/p>\n<p>K\u00fct\u00fcphanenin kalbinde <code>ParallelRouterProvider<\/code> yer al\u0131r. Bu bile\u015fen, uygulaman\u0131z\u0131n k\u00f6k seviyesinde, genellikle React Router&#8217;\u0131n <code>BrowserRouter<\/code> bile\u015feninin hemen alt\u0131nda kurulur. <code>ParallelRouterProvider<\/code>, t\u00fcm paralel y\u00f6nlendirme ba\u011flam\u0131n\u0131 sa\u011flar ve bu sayede uygulaman\u0131z\u0131n herhangi bir yerinden paralel rotalar\u0131 y\u00f6netmenize olanak tan\u0131r. React Router&#8217;\u0131n <code>BrowserRouter<\/code>&#8216;\u0131n\u0131n sa\u011flad\u0131\u011f\u0131 genel y\u00f6nlendirme ba\u011flam\u0131na benzer \u015fekilde \u00e7al\u0131\u015f\u0131r, ancak spesifik olarak paralel y\u00f6nlendirme i\u00e7in gereken durumu ve mant\u0131\u011f\u0131 y\u00f6netir.<\/p>\n<p>Paralel rotalar\u0131 tan\u0131mlamak i\u00e7in <code>ParallelRoutes<\/code> ve <code>ParallelRoute<\/code> bile\u015fenleri kullan\u0131l\u0131r. Bunlar, React Router&#8217;\u0131n <code>Routes<\/code> ve <code>Route<\/code> bile\u015fenlerine olduk\u00e7a benzer bir API sunar, ancak \u00f6nemli bir farkla: her bir <code>ParallelRoute<\/code>, bir <code>name<\/code> prop&#8217;u al\u0131r. Bu <code>name<\/code> prop&#8217;u, o paralel rotan\u0131n hangi &#8220;slot&#8221;a ait oldu\u011funu belirtir. \u00d6rne\u011fin, bir <code>main<\/code> slot&#8217;u (ana i\u00e7erik i\u00e7in) ve bir <code>modal<\/code> slot&#8217;u (a\u00e7\u0131l\u0131r pencere i\u00e7in) tan\u0131mlayabilirsiniz. <code>ParallelRoutes<\/code>, t\u0131pk\u0131 <code>Routes<\/code> gibi, e\u015fle\u015fen ilk <code>ParallelRoute<\/code>&#8216;u render eder. Ancak, burada \u00f6nemli olan, uygulaman\u0131zda birden fazla <code>ParallelRoutes<\/code> blo\u011funa sahip olabilmeniz ve her birinin farkl\u0131 bir slotu y\u00f6netebilmesidir.<\/p>\n<p><pre><code>\nimport React from 'react';\nimport ReactDOM from 'react-dom\/client';\nimport { BrowserRouter } from 'react-router-dom';\nimport { ParallelRouterProvider } from 'parallel-router';\nimport App from '.\/App';\n\nconst root = ReactDOM.createRoot(document.getElementById('root'));\nroot.render(\n  <React.StrictMode>\n    <BrowserRouter>\n      <ParallelRouterProvider>\n        <App \/>\n      <\/ParallelRouterProvider>\n    <\/BrowserRouter>\n  <\/React.StrictMode>\n);\n  <\/pre>\n<p><\/code>\n<\/p>\n<p>Yukar\u0131daki temel kurulum \u00f6rne\u011finde g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, <code>ParallelRouterProvider<\/code>, uygulaman\u0131z\u0131n tamam\u0131n\u0131 sarmalar. Daha sonra, <code>App<\/code> bile\u015feniniz veya alt bile\u015fenleriniz i\u00e7inde farkl\u0131 adland\u0131r\u0131lm\u0131\u015f slotlar i\u00e7in <code>ParallelRoutes<\/code> kullanabilirsiniz. \u00d6rne\u011fin:<\/p>\n<p><pre><code>\n\/\/ App.js\nimport { Routes, Route } from 'react-router-dom';\nimport { ParallelRoutes, ParallelRoute } from 'parallel-router';\nimport DashboardPage from '.\/DashboardPage';\nimport SettingsModal from '.\/SettingsModal';\nimport ProfilePage from '.\/ProfilePage';\n\nfunction App() {\n  return (\n    <div>\n      <!-- Ana i\u00e7erik rotalar\u0131 (geleneksel React Router) -->\n      <Routes>\n        <Route path=\"\/dashboard\" element=<DashboardPage \/> \/>\n        <Route path=\"\/profile\" element=<ProfilePage \/> \/>\n        <!-- Di\u011fer ana rotalar -->\n      <\/Routes>\n\n      <!-- 'modal' slot'u i\u00e7in paralel rotalar -->\n      <ParallelRoutes name=\"modal\">\n        <ParallelRoute path=\"\/modal\/settings\" element=<SettingsModal \/> \/>\n        <ParallelRoute path=\"\/modal\/info\" element=<InfoModal \/> \/>\n      <\/ParallelRoutes>\n    <\/div>\n  );\n}\n  <\/pre>\n<p><\/code>\n<\/p>\n<p>Bu \u00f6rnekte, ana sayfa ve profil gibi rotalar React Router'\u0131n <code>Routes<\/code>'u taraf\u0131ndan y\u00f6netilirken, <code>\/modal\/settings<\/code> path'i ile bir ayarlar modal\u0131n\u0131n a\u00e7\u0131lmas\u0131 <code>ParallelRoutes name=\"modal\"<\/code> taraf\u0131ndan kontrol edilir. Bu, <code>\/dashboard<\/code> ve <code>\/modal\/settings<\/code> URL'lerinin ayn\u0131 anda aktif olabilece\u011fi anlam\u0131na gelir; kullan\u0131c\u0131 hem dashboard i\u00e7eri\u011fini g\u00f6rebilir hem de ayarlar modal\u0131n\u0131 kullanabilir.<\/p>\n<p>Navigasyon ve parametre eri\u015fimi i\u00e7in <code>parallel-router<\/code> kendi kancalar\u0131n\u0131 sunar: <code>useParallelNavigate<\/code> ve <code>useParallelParams<\/code>. <code>useParallelNavigate<\/code>, React Router'\u0131n <code>useNavigate<\/code> kancas\u0131na benzer \u015fekilde \u00e7al\u0131\u015f\u0131r, ancak belirli bir paralel slot'a y\u00f6nlendirme yapman\u0131z\u0131 sa\u011flar. \u00d6rne\u011fin, <code>navigate('\/modal\/settings', { slot: 'modal' })<\/code> ile sadece modal slot'unu g\u00fcncelleyebilirsiniz. Bu, ana URL'yi de\u011fi\u015ftirmeden bir modal\u0131 a\u00e7\u0131p kapatma gibi i\u015flemler i\u00e7in hayati \u00f6neme sahiptir. Benzer \u015fekilde, <code>useParallelParams<\/code>, belirli bir paralel slot'a ait URL parametrelerine eri\u015fim sa\u011flar. Bu kancalar, mevcut React Router kancalar\u0131yla uyumlu \u00e7al\u0131\u015f\u0131r ve geli\u015ftiricilere tan\u0131d\u0131k bir API sunar.<\/p>\n<p>Bu mimarinin sundu\u011fu en b\u00fcy\u00fck avantajlardan biri, uygulaman\u0131n farkl\u0131 b\u00f6l\u00fcmlerinin ba\u011f\u0131ms\u0131zl\u0131\u011f\u0131n\u0131 sa\u011flamas\u0131d\u0131r. Her bir paralel slot, kendi y\u00f6nlendirme mant\u0131\u011f\u0131na, kendi durumuna ve kendi ya\u015fam d\u00f6ng\u00fcs\u00fcne sahip olabilir. Bu, \u015funlar\u0131 sa\u011flar:<\/p>\n<ul>\n<li><b>Performans Optimizasyonu:<\/b> Sadece ilgili slot'un yeniden render edilmesini sa\u011flayarak, uygulaman\u0131n genel performans\u0131n\u0131 art\u0131r\u0131r. Ana i\u00e7erik de\u011fi\u015fmeden modal\u0131n a\u00e7\u0131l\u0131p kapanmas\u0131, gereksiz render i\u015flemlerini engeller.<\/li>\n<li><b>Kod Okunabilirli\u011fi ve Mod\u00fclerlik:<\/b> Uygulaman\u0131n farkl\u0131 k\u0131s\u0131mlar\u0131n\u0131n kod taban\u0131n\u0131 birbirinden ay\u0131r\u0131r. Her slotun kendi rotalar\u0131 ve bile\u015fenleri oldu\u011fu i\u00e7in, kod daha d\u00fczenli ve anla\u015f\u0131l\u0131r hale gelir.<\/li>\n<li><b>Geli\u015ftirici Deneyimi:<\/b> Karma\u015f\u0131k UI senaryolar\u0131n\u0131 y\u00f6netmeyi basitle\u015ftirir. Geli\u015ftiriciler, art\u0131k URL'den state \u00e7\u0131karmak veya karma\u015f\u0131k ko\u015fullu render mant\u0131klar\u0131 yazmak zorunda kalmazlar. Deklaratif API sayesinde neyin nerede g\u00f6sterilece\u011fi a\u00e7\u0131k\u00e7a tan\u0131mlan\u0131r.<\/li>\n<li><b>Geli\u015fmi\u015f Kullan\u0131c\u0131 Deneyimi:<\/b> Kullan\u0131c\u0131lar\u0131n ana ak\u0131\u015flar\u0131n\u0131 kesintiye u\u011fratmadan ek bilgilere veya ara\u00e7lara eri\u015febilmesini sa\u011flar. Bu, \u00f6zellikle dashboard'lar, y\u00f6netim panelleri veya e-ticaret siteleri gibi yo\u011fun etkile\u015fimli uygulamalarda kullan\u0131c\u0131 memnuniyetini art\u0131r\u0131r.<\/li>\n<\/ul>\n<p>\u00d6zetle, <code>parallel-router<\/code>, React Router v6'ya adland\u0131r\u0131lm\u0131\u015f ve ba\u011f\u0131ms\u0131z y\u00f6nlendirme slotlar\u0131 ekleyerek, modern ve karma\u015f\u0131k React uygulamalar\u0131n\u0131n mimarisini \u00f6nemli \u00f6l\u00e7\u00fcde basitle\u015ftiren ve g\u00fc\u00e7lendiren bir k\u00f6pr\u00fc g\u00f6revi g\u00f6r\u00fcr. Bu, SPA'lar\u0131n gelece\u011finde \u00e7oklu, e\u015f zamanl\u0131 kullan\u0131c\u0131 aray\u00fcz\u00fc y\u00f6netimi i\u00e7in kritik bir ad\u0131md\u0131r.<\/p>\n<h2>Ad\u0131m Ad\u0131m Uygulama: Basit Bir Dashboard Uygulamas\u0131nda Paralel Router Kullan\u0131m\u0131 Nas\u0131l Olur?<\/h2>\n<p>\u015eimdi teoriden prati\u011fe ge\u00e7elim ve <code>parallel-router<\/code>'\u0131 ger\u00e7ek bir senaryoda nas\u0131l kullanaca\u011f\u0131m\u0131z\u0131 ad\u0131m ad\u0131m inceleyelim. Senaryomuz, bir dashboard uygulamas\u0131 olacak. Bu dashboard'da ana i\u00e7erik (\u00f6rne\u011fin, istatistikler veya bir veri listesi) her zaman g\u00f6r\u00fcnecek, ancak ayn\u0131 zamanda bir \"bildirimler paneli\" ve bir \"ayarlar modal\u0131\" da URL \u00fczerinden kontrol edilebilecek \u015fekilde paralel olarak var olacak.<\/p>\n<h3>1. Kurulum<\/h3>\n<p>\u0130lk ad\u0131m, <code>parallel-router<\/code> k\u00fct\u00fcphanesini projenize eklemektir. Mevcut bir React projenizin oldu\u011funu varsay\u0131yoruz:<\/p>\n<p><pre><code>\nnpm install parallel-router react-router-dom\n# veya\nyarn add parallel-router react-router-dom\n  <\/pre>\n<p><\/code>\n<\/p>\n<h3>2. Temel Yap\u0131land\u0131rma<\/h3>\n<p><code>index.js<\/code> dosyan\u0131z\u0131, <code>BrowserRouter<\/code> ve <code>ParallelRouterProvider<\/code>'\u0131 i\u00e7erecek \u015fekilde g\u00fcncelleyin:<\/p>\n<p><pre><code>\n\/\/ src\/index.js\nimport React from 'react';\nimport ReactDOM from 'react-dom\/client';\nimport { BrowserRouter } from 'react-router-dom';\nimport { ParallelRouterProvider } from 'parallel-router';\nimport App from '.\/App';\nimport '.\/index.css'; \/\/ Opsiyonel CSS\n\nconst root = ReactDOM.createRoot(document.getElementById('root'));\nroot.render(\n  <React.StrictMode>\n    <BrowserRouter>\n      <ParallelRouterProvider>\n        <App \/>\n      <\/ParallelRouterProvider>\n    <\/BrowserRouter>\n  <\/React.StrictMode>\n);\n  <\/pre>\n<p><\/code>\n<\/p>\n<h3>3. Bile\u015fenleri Olu\u015fturma<\/h3>\n<p>Dashboard uygulamam\u0131z i\u00e7in baz\u0131 temel bile\u015fenleri olu\u015ftural\u0131m:<\/p>\n<p><pre><code>\n\/\/ src\/components\/DashboardLayout.js\nimport React from 'react';\nimport { Outlet, Link } from 'react-router-dom';\nimport { ParallelRoutes, ParallelRoute, useParallelNavigate } from 'parallel-router';\nimport NotificationsPanel from '.\/NotificationsPanel';\nimport SettingsModal from '.\/SettingsModal';\n\nfunction DashboardLayout() {\n  const navigateParallel = useParallelNavigate();\n\n  const openSettingsModal = () => {\n    navigateParallel('\/settings', { slot: 'modal' });\n  };\n\n  const openNotifications = () => {\n    navigateParallel('\/notifications', { slot: 'panel' });\n  };\n\n  const closeNotifications = () => {\n    navigateParallel('\/', { slot: 'panel' }); \/\/ Panel'i kapatmak i\u00e7in bo\u015f bir rota veya ana rota\n  };\n\n  return (\n    <div className=\"dashboard-layout\">\n      <header>\n        <h1>Y\u00f6netim Paneli<\/h1>\n        <nav>\n          <Link to=\"\/dashboard\/overview\">Genel Bak\u0131\u015f<\/Link>\n          <Link to=\"\/dashboard\/reports\">Raporlar<\/Link>\n          <button onClick={openNotifications}>Bildirimler<\/button>\n          <button onClick={openSettingsModal}>Ayarlar<\/button>\n        <\/nav>\n      <\/header>\n\n      <div className=\"main-content\">\n        <Outlet \/> <!-- Ana i\u00e7erik React Router taraf\u0131ndan render edilecek -->\n      <\/div>\n\n      <!-- 'panel' slot'u i\u00e7in paralel rotalar -->\n      <ParallelRoutes name=\"panel\">\n        <ParallelRoute path=\"\/notifications\" element=<NotificationsPanel onClose={closeNotifications} \/> \/>\n        <ParallelRoute path=\"*\" element={null} \/> <!-- E\u015fle\u015fmeyen durumlarda bo\u015f render -->\n      <\/ParallelRoutes>\n\n      <!-- 'modal' slot'u i\u00e7in paralel rotalar -->\n      <ParallelRoutes name=\"modal\">\n        <ParallelRoute path=\"\/settings\" element=<SettingsModal \/> \/>\n        <ParallelRoute path=\"*\" element={null} \/>\n      <\/ParallelRoutes>\n    <\/div>\n  );\n}\n\nexport default DashboardLayout;\n  <\/pre>\n<p><\/code>\n<\/p>\n<p><pre><code>\n\/\/ src\/components\/NotificationsPanel.js\nimport React from 'react';\nimport { useParallelNavigate } from 'parallel-router';\n\nfunction NotificationsPanel({ onClose }) {\n  const navigateParallel = useParallelNavigate();\n\n  const handleClose = () => {\n    navigateParallel('\/', { slot: 'panel' }); \/\/ Panel'i kapatmak i\u00e7in bo\u015f bir rotaya y\u00f6nlendirme\n    onClose(); \/\/ Parent bile\u015fene haber ver (e\u011fer gerekiyorsa)\n  };\n\n  return (\n    <div className=\"notifications-panel\">\n      <h3>Bildirimler<\/h3>\n      <ul>\n        <li>Yeni sipari\u015f al\u0131nd\u0131! (#12345)<\/li>\n        <li>Sistem g\u00fcncellemesi tamamland\u0131.<\/li>\n        <li>Destek talebiniz yan\u0131tland\u0131.<\/li>\n      <\/ul>\n      <button onClick={handleClose}>Kapat<\/button>\n    <\/div>\n  );\n}\n\nexport default NotificationsPanel;\n  <\/pre>\n<p><\/code>\n<\/p>\n<p><pre><code>\n\/\/ src\/components\/SettingsModal.js\nimport React from 'react';\nimport { useParallelNavigate } from 'parallel-router';\n\nfunction SettingsModal() {\n  const navigateParallel = useParallelNavigate();\n\n  const handleClose = () => {\n    navigateParallel('\/', { slot: 'modal' }); \/\/ Modal\u0131 kapatmak i\u00e7in ana rotaya y\u00f6nlendirme\n  };\n\n  return (\n    <div className=\"modal-backdrop\" onClick={handleClose}>\n      <div className=\"settings-modal-content\" onClick={(e) => e.stopPropagation()}>\n        <h3>Uygulama Ayarlar\u0131<\/h3>\n        <p>Burada uygulama ayarlar\u0131n\u0131z\u0131 de\u011fi\u015ftirebilirsiniz.<\/p>\n        <button onClick={handleClose}>Kaydet ve Kapat<\/button>\n      <\/div>\n    <\/div>\n  );\n}\n\nexport default SettingsModal;\n  <\/pre>\n<p><\/code>\n<\/p>\n<p><pre><code>\n\/\/ src\/pages\/OverviewPage.js\nimport React from 'react';\n\nfunction OverviewPage() {\n  return (\n    <div>\n      <h2>Genel Bak\u0131\u015f<\/h2>\n      <p>Bu sizin dashboard'unuzun ana genel bak\u0131\u015f sayfas\u0131d\u0131r.<\/p>\n      <p>G\u00fcnl\u00fck istatistikler, son aktiviteler burada g\u00f6sterilir.<\/p>\n    <\/div>\n  );\n}\n\nexport default OverviewPage;\n  <\/pre>\n<p><\/code>\n<\/p>\n<p><pre><code>\n\/\/ src\/pages\/ReportsPage.js\nimport React from 'react';\n\nfunction ReportsPage() {\n  return (\n    <div>\n      <h2>Raporlar<\/h2>\n      <p>Burada detayl\u0131 raporlar\u0131n\u0131z\u0131 g\u00f6r\u00fcnt\u00fcleyebilirsiniz.<\/p>\n      <p>Grafikler ve tablolar bu sayfada yer alacak.<\/p>\n    <\/div>\n  );\n}\n\nexport default ReportsPage;\n  <\/pre>\n<p><\/code>\n<\/p>\n<h3>4. App.js Dosyas\u0131<\/h3>\n<p>Ana uygulama bile\u015feniniz (<code>App.js<\/code>), <code>DashboardLayout<\/code>'u ve ana React Router rotalar\u0131n\u0131 i\u00e7ermelidir:<\/p>\n<p><pre><code>\n\/\/ src\/App.js\nimport React from 'react';\nimport { Routes, Route, Link } from 'react-router-dom';\nimport DashboardLayout from '.\/components\/DashboardLayout';\nimport OverviewPage from '.\/pages\/OverviewPage';\nimport ReportsPage from '.\/pages\/ReportsPage';\nimport HomePage from '.\/pages\/HomePage'; \/\/ Basit bir ana sayfa\nimport '.\/App.css'; \/\/ Uygulama genel CSS'i\n\nfunction HomePage() {\n  return (\n    <div className=\"home-page\">\n      <h2>Ho\u015f Geldiniz!<\/h2>\n      <p>Ba\u015flamak i\u00e7in l\u00fctfen <Link to=\"\/dashboard\/overview\">Dashboard'a gidin<\/Link>.<\/p>\n    <\/div>\n  );\n}\n\nfunction App() {\n  return (\n    <Routes>\n      <Route path=\"\/\" element=<HomePage \/> \/>\n      <Route path=\"\/dashboard\" element=<DashboardLayout \/>>\n        <Route index element=<OverviewPage \/> \/>\n        <Route path=\"overview\" element=<OverviewPage \/> \/>\n        <Route path=\"reports\" element=<ReportsPage \/> \/>\n      <\/Route>\n    <\/Routes>\n  );\n}\n\nexport default App;\n  <\/pre>\n<p><\/code>\n<\/p>\n<h3>5. CSS (Stil \u0130\u00e7in)<\/h3>\n<p>Basit bir stil ile paralel panelleri ve modal\u0131 g\u00f6rselle\u015ftirelim. (<code>src\/index.css<\/code> veya <code>src\/App.css<\/code> i\u00e7ine eklenebilir)<\/p>\n<p><pre><code class=\"language-css\">\n\/* src\/App.css *\/\nbody {\n  margin: 0;\n  font-family: sans-serif;\n}\n\n.dashboard-layout {\n  display: flex;\n  flex-direction: column;\n  min-height: 100vh;\n}\n\nheader {\n  background-color: #282c34;\n  padding: 20px;\n  color: white;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n}\n\nheader nav a, header nav button {\n  color: white;\n  margin-left: 15px;\n  text-decoration: none;\n  background: none;\n  border: none;\n  cursor: pointer;\n  font-size: 1em;\n}\n\n.main-content {\n  flex-grow: 1;\n  padding: 20px;\n  background-color: #f0f2f5;\n}\n\n.notifications-panel {\n  position: fixed;\n  right: 0;\n  top: 0;\n  width: 300px;\n  height: 100%;\n  background-color: #fff;\n  border-left: 1px solid #ddd;\n  box-shadow: -2px 0 5px rgba(0,0,0,0.1);\n  padding: 20px;\n  z-index: 100;\n  transform: translateX(100%);\n  transition: transform 0.3s ease-out;\n}\n\n.notifications-panel.active { \/* CSS ile dinamik olarak 'active' s\u0131n\u0131f\u0131 ekleyerek panelin g\u00f6r\u00fcn\u00fcrl\u00fc\u011f\u00fcn\u00fc kontrol edebilirsiniz *\/\n  transform: translateX(0);\n}\n\n\/* Modal i\u00e7in *\/\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background-color: rgba(0, 0, 0, 0.5);\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  z-index: 1000;\n}\n\n.settings-modal-content {\n  background-color: white;\n  padding: 30px;\n  border-radius: 8px;\n  box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\n  min-width: 400px;\n  max-width: 90%;\n}\n  <\/pre>\n<p><\/code>\n<\/p>\n<h3>Vaka Analizi: Y\u00f6netim Panelinde Kesintisiz \u0130\u015f Ak\u0131\u015f\u0131<\/h3>\n<p>Bu yap\u0131, bir y\u00f6netim paneli veya CRM uygulamas\u0131nda kullan\u0131c\u0131lar\u0131n ana ak\u0131\u015f\u0131n\u0131 kesintiye u\u011fratmadan ek bilgilere eri\u015fimini nas\u0131l kolayla\u015ft\u0131r\u0131r? D\u00fc\u015f\u00fcn\u00fcn ki bir sat\u0131\u015f temsilcisi, bir m\u00fc\u015fterinin profilini incelerken (ana i\u00e7erik: <code>\/dashboard\/customer\/123<\/code>), ayn\u0131 anda sa\u011f tarafta a\u00e7\u0131lan bir bildirim paneli (URL'de <code>\/notifications<\/code> i\u00e7eren paralel rota) \u00fczerinden yeni gelen potansiyel m\u00fc\u015fteri bildirimlerini g\u00f6rebilir. Bu paneli kapatmadan m\u00fc\u015fteri profilindeki farkl\u0131 sekmeler aras\u0131nda ge\u00e7i\u015f yapabilir. Ek olarak, bir \"ayarlar\" modal\u0131 a\u00e7\u0131ld\u0131\u011f\u0131nda (URL'de <code>\/settings<\/code> i\u00e7eren ba\u015fka bir paralel rota), ana i\u00e7erik ve bildirim paneli oldu\u011fu gibi kal\u0131r, sadece modal \u00fcstlerine bindirilir. Bu, temsilcinin dikkatini da\u011f\u0131tmadan, ba\u011flam de\u011fi\u015ftirmeden farkl\u0131 g\u00f6revleri e\u015f zamanl\u0131 olarak y\u00f6netmesini sa\u011flar.<\/p>\n<p>Geleneksel y\u00f6nlendirme ile bu t\u00fcr bir deneyimi elde etmek, karma\u015f\u0131k URL yap\u0131lar\u0131, sorgu parametrelerinin s\u00fcrekli kontrol\u00fc veya JavaScript ile DOM'u manuel olarak y\u00f6netmeyi gerektirirdi. Bu da geli\u015ftirme s\u00fcrecini uzat\u0131r, hata olas\u0131l\u0131\u011f\u0131n\u0131 art\u0131r\u0131r ve kodun s\u00fcrd\u00fcr\u00fclebilirli\u011fini zorla\u015ft\u0131r\u0131rd\u0131. <code>parallel-router<\/code> sayesinde, her bir paralel bile\u015fen (bildirim paneli, ayarlar modal\u0131) kendi y\u00f6nlendirme mant\u0131\u011f\u0131yla ba\u011f\u0131ms\u0131z bir \u015fekilde y\u00f6netilir, bu da hem geli\u015ftirici hem de kullan\u0131c\u0131 i\u00e7in daha verimli ve keyifli bir deneyim sunar. \u00d6rne\u011fin, bir kullan\u0131c\u0131n\u0131n yeni gelen bildirimleri g\u00f6rmek i\u00e7in ana sayfadan ayr\u0131l\u0131p bildirimler sayfas\u0131na gitmek zorunda kalmamas\u0131, kullan\u0131c\u0131 deneyimi a\u00e7\u0131s\u0131ndan b\u00fcy\u00fck bir avantajd\u0131r. Paralel y\u00f6nlendirme, modern web uygulamalar\u0131n\u0131n esneklik ve interaktivite beklentilerini kar\u015f\u0131lamak i\u00e7in g\u00fc\u00e7l\u00fc bir mekanizma sa\u011flar.<\/p>\n<h2>\u0130leri D\u00fczey Kullan\u0131m Senaryolar\u0131 ve Optimizasyonlar: parallel-router ile Performans ve Kompleks Yap\u0131lar Nas\u0131l Y\u00f6netilir?<\/h2>\n<p><code>parallel-router<\/code>'\u0131n temel kullan\u0131m\u0131n\u0131 anlad\u0131ktan sonra, daha karma\u015f\u0131k senaryolar\u0131 ele alabilir ve uygulaman\u0131z\u0131n performans\u0131n\u0131 ve \u00f6l\u00e7eklenebilirli\u011fini art\u0131racak ileri d\u00fczey tekniklere odaklanabiliriz. Paralel y\u00f6nlendirme, uygulaman\u0131z\u0131n kullan\u0131c\u0131 aray\u00fcz\u00fcn\u00fc (UI) daha mod\u00fcler ve dinamik hale getirme konusunda b\u00fcy\u00fck potansiyel sunar.<\/p>\n<h3>Named Outlets ve State Y\u00f6netimi<\/h3>\n<p>Uygulaman\u0131z b\u00fcy\u00fcd\u00fck\u00e7e, birden fazla paralel rotan\u0131n birbiriyle etkile\u015fime girmesi gerekebilir. <code>parallel-router<\/code>, her bir paralel slot i\u00e7in benzersiz bir ad (<code>name<\/code> prop'u) tan\u0131mlaman\u0131za izin vererek bu etkile\u015fimi y\u00f6netmeyi kolayla\u015ft\u0131r\u0131r. \u00d6rne\u011fin, bir ana i\u00e7erik (<code>main<\/code>), bir yan panel (<code>sidebar<\/code>) ve bir modal (<code>modal<\/code>) slot'unuz olabilir. Her bir slot, kendi i\u00e7inde farkl\u0131 rotalar ve bile\u015fenler bar\u0131nd\u0131rabilir. Bu durum, \u00f6zellikle \u00e7oklu panelleri veya widget'lar\u0131 olan dashboard tarz\u0131 uygulamalarda faydal\u0131d\u0131r.<\/p>\n<p><code>useParallelParams<\/code> kancas\u0131, React Router'\u0131n <code>useParams<\/code> kancas\u0131na benzer \u015fekilde \u00e7al\u0131\u015f\u0131r, ancak belirli bir paralel slot'a ait URL parametrelerine eri\u015fmenizi sa\u011flar. Bu, farkl\u0131 slotlardaki bile\u015fenlerin, URL'deki kendi paralel yollar\u0131na \u00f6zg\u00fc verileri \u00e7ekebilece\u011fi anlam\u0131na gelir. \u00d6rne\u011fin, <code>\/dashboard\/analytics<\/code> adresindeyken ve ayn\u0131 anda <code>\/notifications\/unread<\/code> paralel rotas\u0131yla bildirim panelini a\u00e7m\u0131\u015fken, <code>useParallelParams({ slot: &#039;panel&#039; })<\/code> kullanarak sadece bildirim panelinin URL'sindeki parametreleri alabilirsiniz. Bu yakla\u015f\u0131m, state y\u00f6netimini merkezile\u015ftirmeden bile\u015fenler aras\u0131 veri ak\u0131\u015f\u0131n\u0131 d\u00fczenlemenize yard\u0131mc\u0131 olur ve \"prop drilling\" sorununu azalt\u0131r.<\/p>\n<h3>Dinamik Paralel Rotlar<\/h3>\n<p>Baz\u0131 durumlarda, paralel rotalar\u0131n varl\u0131\u011f\u0131 veya i\u00e7eri\u011fi ko\u015fullu olabilir. \u00d6rne\u011fin, belirli bir kullan\u0131c\u0131 rol\u00fcne sahip olmayanlar i\u00e7in bir \"admin paneli\" modal\u0131n\u0131n hi\u00e7 render edilmemesi gerekebilir. <code>ParallelRoutes<\/code> ve <code>ParallelRoute<\/code> bile\u015fenlerini ko\u015fullu olarak render ederek bu dinamizmi sa\u011flayabilirsiniz:<\/p>\n<p><pre><code>\n\/\/ src\/components\/DashboardLayout.js i\u00e7inde\n\/\/ ...\nconst user = useAuth(); \/\/ Varsay\u0131msal bir kimlik do\u011frulama kancas\u0131\n\nreturn (\n  <div>\n    <!-- ... di\u011fer i\u00e7erik ... -->\n\n    <ParallelRoutes name=\"modal\">\n      <ParallelRoute path=\"\/settings\" element=<SettingsModal \/> \/>\n      {user.isAdmin && (\n        <ParallelRoute path=\"\/admin-panel\" element=<AdminPanelModal \/> \/>\n      )}\n      <ParallelRoute path=\"*\" element={null} \/>\n    <\/ParallelRoutes>\n  <\/div>\n);\n  <\/pre>\n<p><\/code>\n<\/p>\n<p>Bu sayede, <code>AdminPanelModal<\/code> sadece kullan\u0131c\u0131 bir y\u00f6netici ise render edilecektir. Bu esneklik, uygulaman\u0131z\u0131n farkl\u0131 kullan\u0131c\u0131 senaryolar\u0131na veya dinamik i\u015f kurallar\u0131na uyum sa\u011flamas\u0131na olanak tan\u0131r.<\/p>\n<h3>Error Boundaries ile Hata Y\u00f6netimi<\/h3>\n<p>Paralel rotalar, uygulaman\u0131z\u0131n farkl\u0131 ba\u011f\u0131ms\u0131z par\u00e7alar\u0131n\u0131 temsil etti\u011finden, bir slot'taki bir hatan\u0131n t\u00fcm uygulamay\u0131 \u00e7\u00f6kertmemesi \u00f6nemlidir. React'in Error Boundaries (Hata S\u0131n\u0131rlar\u0131) \u00f6zelli\u011fini kullanarak, her bir paralel rota i\u00e7in veya genel olarak t\u00fcm paralel rotalar\u0131 kapsayan bir hata s\u0131n\u0131r\u0131 tan\u0131mlayabilirsiniz. Bu, bir paralel rotada beklenmedik bir hata olu\u015ftu\u011funda, sadece o rotan\u0131n etkilenmesini ve uygulaman\u0131n geri kalan\u0131n\u0131n \u00e7al\u0131\u015fmaya devam etmesini sa\u011flar. Bu, kullan\u0131c\u0131 deneyimi a\u00e7\u0131s\u0131ndan kritik bir optimizasyondur.<\/p>\n<p><pre><code>\nimport React from 'react';\n\nclass ErrorBoundary extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = { hasError: false };\n  }\n\n  static getDerivedStateFromError(error) {\n    return { hasError: true };\n  }\n\n  componentDidCatch(error, errorInfo) {\n    console.error(\"Hata yakaland\u0131:\", error, errorInfo);\n  }\n\n  render() {\n    if (this.state.hasError) {\n      return <h2>Bu b\u00f6l\u00fcmde bir hata olu\u015ftu.<\/h2>;\n    }\n\n    return this.props.children;\n  }\n}\n\n\/\/ ...\n\/\/ DashboardLayout i\u00e7inde\n<ParallelRoutes name=\"panel\">\n  <ErrorBoundary>\n    <ParallelRoute path=\"\/notifications\" element=<NotificationsPanel \/> \/>\n  <\/ErrorBoundary>\n  <ParallelRoute path=\"*\" element={null} \/>\n<\/ParallelRoutes>\n  <\/pre>\n<p><\/code>\n<\/p>\n<h3>Mobil Uyumlu Tasar\u0131m (Media Query \u00d6rne\u011fi)<\/h3>\n<p>Paralel y\u00f6nlendirme, responsive tasar\u0131m stratejileriyle harika bir uyum i\u00e7indedir. B\u00fcy\u00fck ekranlarda yan yana g\u00f6sterilen paneller veya modal'lar, k\u00fc\u00e7\u00fck ekranlarda tam ekran bir modal'a veya ayr\u0131 bir sayfaya d\u00f6n\u00fc\u015febilir. <code>parallel-router<\/code> do\u011frudan responsive davran\u0131\u015f sa\u011flamaz, ancak CSS media query'leri ve bile\u015fen i\u00e7inde ko\u015fullu renderlama ile bu davran\u0131\u015flar\u0131 kolayca entegre edebilirsiniz. \u00d6rne\u011fin, bir yan panelin masa\u00fcst\u00fcnde sabit bir geni\u015fli\u011fe sahipken, mobil cihazlarda tam ekran bir modal olarak a\u00e7\u0131lmas\u0131n\u0131 sa\u011flayabilirsiniz.<\/p>\n<p><pre><code class=\"language-css\">\n\/* App.css veya ilgili CSS dosyas\u0131 *\/\n.notifications-panel {\n  position: fixed;\n  right: 0;\n  top: 0;\n  width: 300px; \/* Masa\u00fcst\u00fcnde yan panel *\/\n  height: 100%;\n  background-color: #fff;\n  border-left: 1px solid #ddd;\n  box-shadow: -2px 0 5px rgba(0,0,0,0.1);\n  padding: 20px;\n  z-index: 100;\n  transform: translateX(100%); \/* Ba\u015flang\u0131\u00e7ta gizli *\/\n  transition: transform 0.3s ease-out;\n}\n\n.notifications-panel.active {\n  transform: translateX(0); \/* A\u00e7\u0131k durumda *\/\n}\n\n@media (max-width: 768px) { \/* Tablet ve mobil cihazlar i\u00e7in *\/\n  .notifications-panel {\n    width: 100%; \/* Tam ekran geni\u015fli\u011fi *\/\n    height: 100vh; \/* Tam ekran y\u00fcksekli\u011fi *\/\n    top: 0;\n    left: 0;\n    border-left: none;\n    transform: translateY(100%); \/* A\u015fa\u011f\u0131dan yukar\u0131ya a\u00e7\u0131lma efekti i\u00e7in *\/\n    box-shadow: 0 -2px 5px rgba(0,0,0,0.1);\n  }\n\n  .notifications-panel.active {\n    transform: translateY(0);\n  }\n}\n  <\/pre>\n<p><\/code>\n<\/p>\n<p>Bu CSS ile birlikte, bile\u015fenlerinizde <code>active<\/code> s\u0131n\u0131f\u0131n\u0131 dinamik olarak ekleyebilir ve mobil cihazlarda panelin farkl\u0131 bir \u015fekilde g\u00f6r\u00fcnmesini sa\u011flayabilirsiniz. Ayr\u0131ca, <code>react-responsive<\/code> gibi k\u00fct\u00fcphaneleri kullanarak JavaScript taraf\u0131nda da ekran boyutuna g\u00f6re ko\u015fullu renderlama yapabilirsiniz.<\/p>\n<blockquote>\n<p>Uzman \u0130pucu: Bu teknikle performans\u0131 %40 art\u0131rabilirsiniz<\/p>\n<p>Paralel rotalar\u0131 kullan\u0131rken, \u00f6zellikle b\u00fcy\u00fck bile\u015fenler i\u00e7in React'in lazy loading (tembel y\u00fckleme) \u00f6zelli\u011fi ile birle\u015ftirin. <code>React.lazy()<\/code> ve <code>Suspense<\/code> kullanarak, bir paralel rota yaln\u0131zca ger\u00e7ekten ihtiya\u00e7 duyuldu\u011funda (yani URL e\u015fle\u015fti\u011finde) y\u00fcklenir. Bu, ba\u015flang\u0131\u00e7 y\u00fckleme s\u00fcresini \u00f6nemli \u00f6l\u00e7\u00fcde azalt\u0131r ve uygulaman\u0131z\u0131n daha h\u0131zl\u0131 hissetmesini sa\u011flar. \u00d6rne\u011fin:<\/p>\n<pre><code>\n\/\/ src\/components\/DashboardLayout.js i\u00e7inde\nimport React, { Suspense } from 'react';\n\/\/ ...\nconst LazySettingsModal = React.lazy(() => import('.\/SettingsModal'));\nconst LazyNotificationsPanel = React.lazy(() => import('.\/NotificationsPanel'));\n\n\/\/ ...\n<ParallelRoutes name=\"modal\">\n  <ParallelRoute\n    path=\"\/settings\"\n    element={<Suspense fallback={<div>Y\u00fckleniyor...<\/div>}><LazySettingsModal \/><\/Suspense>}\n  \/>\n  <ParallelRoute path=\"*\" element={null} \/>\n<\/ParallelRoutes>\n\n<ParallelRoutes name=\"panel\">\n  <ParallelRoute\n    path=\"\/notifications\"\n    element={<Suspense fallback={<div>Y\u00fckleniyor...<\/div>}><LazyNotificationsPanel \/><\/Suspense>}\n  \/>\n  <ParallelRoute path=\"*\" element={null} \/>\n<\/ParallelRoutes>\n  <\/pre>\n<p><\/code><\/p>\n<p>Bu \u015fekilde, kullan\u0131c\u0131 bildirimler panelini veya ayarlar modal\u0131n\u0131 a\u00e7ana kadar ilgili bile\u015fenlerin kodlar\u0131 indirilmez, bu da band geni\u015fli\u011finden tasarruf sa\u011flar ve ilk y\u00fckleme s\u00fcresini optimize eder. Ayr\u0131ca, karma\u015f\u0131k bile\u015fenleri <code>React.memo<\/code> ile sarmak da gereksiz yeniden renderlar\u0131 \u00f6nleyerek performansa katk\u0131da bulunabilir.<\/p>\n<\/blockquote>\n<p>Bu ileri d\u00fczey teknikler ve optimizasyonlar, <code>parallel-router<\/code>'\u0131n g\u00fcc\u00fcn\u00fc tam olarak kullanman\u0131z\u0131 ve modern, \u00f6l\u00e7eklenebilir ve y\u00fcksek performansl\u0131 React uygulamalar\u0131 geli\u015ftirmenizi sa\u011flar. Do\u011fru stratejilerle, uygulaman\u0131z\u0131n her bir par\u00e7as\u0131n\u0131 ba\u011f\u0131ms\u0131z ve verimli bir \u015fekilde y\u00f6netebilirsiniz.<\/p>\n<h2>React Uygulamalar\u0131n\u0131zda Yeni Bir D\u00f6nem: parallel-router ile Gelece\u011fe Y\u00f6nelin<\/h2>\n<p>Bu makalede, modern React uygulamalar\u0131n\u0131n kar\u015f\u0131la\u015ft\u0131\u011f\u0131 y\u00f6nlendirme zorluklar\u0131n\u0131 ve \u00f6zellikle tekil y\u00f6nlendirme modellerinin yetersiz kald\u0131\u011f\u0131 paralel UI senaryolar\u0131n\u0131 ele ald\u0131k. React Router v6'n\u0131n sa\u011flad\u0131\u011f\u0131 g\u00fc\u00e7l\u00fc temel \u00fczerine in\u015fa edilen <code>parallel-router<\/code> k\u00fct\u00fcphanesinin, bu t\u00fcr karma\u015f\u0131k ihtiya\u00e7lara nas\u0131l zarif ve etkili bir \u00e7\u00f6z\u00fcm sundu\u011funu detayl\u0131 bir \u015fekilde inceledik. G\u00f6rd\u00fck ki, <code>parallel-router<\/code> ile uygulaman\u0131z\u0131n farkl\u0131 \"slot\"lar\u0131na (adland\u0131r\u0131lm\u0131\u015f \u00e7\u0131k\u0131\u015flar) ba\u011f\u0131ms\u0131z olarak bile\u015fenler render edebilir, her bir slot i\u00e7in ayr\u0131 y\u00f6nlendirme kurallar\u0131 tan\u0131mlayabilir ve bu sayede kullan\u0131c\u0131 deneyimini \u00f6nemli \u00f6l\u00e7\u00fcde geli\u015ftirebilirsiniz.<\/p>\n<p><code>ParallelRouterProvider<\/code>'dan <code>ParallelRoutes<\/code> ve <code>ParallelRoute<\/code> bile\u015fenlerine, <code>useParallelNavigate<\/code> ve <code>useParallelParams<\/code> kancalar\u0131na kadar, k\u00fct\u00fcphanenin temel mimarisini ve \u00e7al\u0131\u015fma prensiplerini ad\u0131m ad\u0131m kavrad\u0131k. Basit bir dashboard uygulamas\u0131 \u00f6rne\u011fi \u00fczerinden, ana i\u00e7erik, bildirim paneli ve ayarlar modal\u0131n\u0131 ayn\u0131 anda ve birbirinden ba\u011f\u0131ms\u0131z olarak nas\u0131l y\u00f6netebilece\u011fimizi \u00f6\u011frendik. Bu vaka analizi, <code>parallel-router<\/code>'\u0131n bir y\u00f6netim panelinde veya CRM uygulamas\u0131nda kullan\u0131c\u0131lar\u0131n ana ak\u0131\u015f\u0131n\u0131 kesintiye u\u011fratmadan ek bilgilere eri\u015fimini nas\u0131l kolayla\u015ft\u0131rd\u0131\u011f\u0131n\u0131 somut bir \u015fekilde ortaya koydu. Ayr\u0131ca, ileri d\u00fczey kullan\u0131m senaryolar\u0131na de\u011finerek, dinamik paralel rotalar\u0131n nas\u0131l y\u00f6netilece\u011fini, hata s\u0131n\u0131rlar\u0131 ile g\u00fcvenli\u011fin nas\u0131l sa\u011flanaca\u011f\u0131n\u0131 ve mobil uyumlu tasar\u0131mlar i\u00e7in CSS media query'leri ile birlikte nas\u0131l kullan\u0131labilece\u011fini ke\u015ffettik. \u00d6zellikle React'in lazy loading ve Suspense \u00f6zellikleriyle <code>parallel-router<\/code>'\u0131 birle\u015ftirmek, performans a\u00e7\u0131s\u0131ndan \u00f6nemli kazan\u0131mlar sa\u011flayabilece\u011fimizi g\u00f6sterdi.<\/p>\n<p>Sonu\u00e7 olarak, <code>parallel-router<\/code> React geli\u015ftiricilerine, karma\u015f\u0131k UI gereksinimlerini kar\u015f\u0131lamak, kodu daha mod\u00fcler ve okunabilir hale getirmek, bak\u0131m maliyetlerini d\u00fc\u015f\u00fcrmek ve nihayetinde daha h\u0131zl\u0131 ve daha etkile\u015fimli kullan\u0131c\u0131 deneyimleri sunmak i\u00e7in g\u00fc\u00e7l\u00fc bir ara\u00e7 sunuyor. Uygulamalar\u0131n\u0131z\u0131n \u00f6l\u00e7eklenebilirli\u011fini art\u0131r\u0131rken, geli\u015ftirme s\u00fcrecini basitle\u015ftirme potansiyeli ta\u015f\u0131yan bu k\u00fct\u00fcphane, React ekosistemindeki y\u00f6nlendirme \u00e7\u00f6z\u00fcmlerine yenilik\u00e7i bir bak\u0131\u015f a\u00e7\u0131s\u0131 getiriyor. E\u011fer mevcut React Router v6 projelerinizde benzer paralel UI yap\u0131lar\u0131n\u0131 y\u00f6netme konusunda zorluklar ya\u015f\u0131yorsan\u0131z, <code>parallel-router<\/code> kesinlikle projenizde denemeye de\u011fer bir \u00e7\u00f6z\u00fcmd\u00fcr. Topluluk katk\u0131lar\u0131 ve s\u00fcrekli geli\u015fimle, <code>parallel-router<\/code>'\u0131n gelecekte daha da zenginle\u015fece\u011fi ve bir\u00e7ok React uygulamas\u0131n\u0131n temel ta\u015f\u0131 haline gelece\u011fi \u00f6ng\u00f6r\u00fclebilir. Uygulamalar\u0131n\u0131z\u0131 gelece\u011fe haz\u0131rlamak ve kullan\u0131c\u0131lar\u0131n\u0131za kesintisiz deneyimler sunmak i\u00e7in <code>parallel-router<\/code>'\u0131 ke\u015ffetmeye bug\u00fcn ba\u015flay\u0131n.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<dl>\n<dt>1. <code>parallel-router<\/code> sadece React Router v6 ile mi \u00e7al\u0131\u015f\u0131r?<\/dt>\n<dd>Cevap: Evet, <code>parallel-router<\/code> k\u00fct\u00fcphanesi, React Router v6'n\u0131n API'leri \u00fczerine in\u015fa edilmi\u015ftir ve onunla birlikte \u00e7al\u0131\u015facak \u015fekilde tasarlanm\u0131\u015ft\u0131r. Bu nedenle, projenizde React Router v6'n\u0131n kurulu ve yap\u0131land\u0131r\u0131lm\u0131\u015f olmas\u0131 gerekmektedir.<\/dd>\n<dt>2. Performans \u00fczerinde bir etkisi var m\u0131?<\/dt>\n<dd>Cevap: Do\u011fru kullan\u0131ld\u0131\u011f\u0131nda, <code>parallel-router<\/code> performans\u0131 art\u0131rabilir. Geleneksel yakla\u015f\u0131mlar\u0131n aksine, sadece ilgili paralel slot'un g\u00fcncellenmesini veya yeniden render edilmesini sa\u011flar. Bu, gereksiz yeniden render i\u015flemlerini ve DOM manip\u00fclasyonlar\u0131n\u0131 azaltarak \u00f6zellikle karma\u015f\u0131k UI'lara sahip uygulamalarda daha ak\u0131c\u0131 bir deneyim sunabilir. Ayr\u0131ca, lazy loading ile birlikte kullan\u0131ld\u0131\u011f\u0131nda ba\u015flang\u0131\u00e7 y\u00fckleme s\u00fcreleri de optimize edilebilir.<\/dd>\n<dt>3. <code>parallel-router<\/code> yerine nested routes kullanamaz m\u0131y\u0131m?<\/dt>\n<dd>Cevap: Nested routes (i\u00e7 i\u00e7e y\u00f6nlendirme) ve paralel y\u00f6nlendirme farkl\u0131 ama\u00e7lara hizmet eder. Nested routes, hiyerar\u015fik bir UI yap\u0131s\u0131nda alt yollar\u0131n ana yollar\u0131n i\u00e7ine yerle\u015ftirilmesi i\u00e7in kullan\u0131l\u0131rken (\u00f6rne\u011fin, <code>\/users<\/code> alt\u0131nda <code>\/users\/:id<\/code>), paralel y\u00f6nlendirme ayn\u0131 anda birden fazla ba\u011f\u0131ms\u0131z UI par\u00e7as\u0131n\u0131n (\u00f6rne\u011fin, ana i\u00e7erik ve bir modal) y\u00f6netilmesi i\u00e7indir. Paralel y\u00f6nlendirme, i\u00e7 i\u00e7e y\u00f6nlendirme ile y\u00f6netilemeyecek ba\u011f\u0131ms\u0131z ve e\u015f zamanl\u0131 bile\u015fen g\u00f6r\u00fcnt\u00fcleme senaryolar\u0131n\u0131 ele al\u0131r.<\/dd>\n<dt>4. <code>parallel-router<\/code> i\u00e7in hangi React s\u00fcr\u00fcmleri destekleniyor?<\/dt>\n<dd>Cevap: <code>parallel-router<\/code>, React kancalar\u0131n\u0131 (hooks) kulland\u0131\u011f\u0131 i\u00e7in, React 16.8 ve \u00fczeri (hooks deste\u011fi olan t\u00fcm versiyonlar) ile uyumludur.<\/dd>\n<dt>5. Mobilde farkl\u0131 bir davran\u0131\u015f sergilemesi nas\u0131l sa\u011flan\u0131r?<\/dt>\n<dd>Cevap: Mobil uyumluluk, CSS media query'leri ve React bile\u015fenleri i\u00e7inde ko\u015fullu renderlama ile sa\u011flan\u0131r. CSS media query'lerini kullanarak bir paralel panelin b\u00fcy\u00fck ekranlarda yan tarafta, k\u00fc\u00e7\u00fck ekranlarda ise tam ekran bir modal gibi g\u00f6r\u00fcnmesini sa\u011flayabilirsiniz. Ayr\u0131ca, <code>react-responsive<\/code> gibi k\u00fct\u00fcphanelerle ekran boyutuna g\u00f6re JavaScript taraf\u0131nda farkl\u0131 bile\u015fenleri veya render mant\u0131klar\u0131n\u0131 tetikleyebilirsiniz.<\/dd>\n<\/dl>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"React uygulamalar\u0131n\u0131zda karma\u015f\u0131k UI yap\u0131lar\u0131n\u0131 y\u00f6netirken kar\u015f\u0131la\u015ft\u0131\u011f\u0131n\u0131z zorluklara modern bir \u00e7\u00f6z\u00fcm m\u00fc ar\u0131yorsunuz? parallel-router ile React Router v6&#8217;ya&hellip;","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-32518","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 v6 ile Paralel Y\u00f6nlendirme Nas\u0131l Eklenir? parallel-router Tan\u0131t\u0131m\u0131 \ud83d\ude80<\/title>\n<meta name=\"description\" content=\"React uygulamalar\u0131n\u0131zda karma\u015f\u0131k UI yap\u0131lar\u0131n\u0131 y\u00f6netirken kar\u015f\u0131la\u015ft\u0131\u011f\u0131n\u0131z zorluklara modern bir \u00e7\u00f6z\u00fcm m\u00fc ar\u0131yorsunuz? `parallel-router` ile React Router v6&#039;ya paralel y\u00f6nlendirme \u00f6zelli\u011fini nas\u0131l entegre edebilece\u011finizi ad\u0131m ad\u0131m ke\u015ffedin. Kullan\u0131c\u0131 deneyimini d\u00f6n\u00fc\u015ft\u00fcren bu yeni yakla\u015f\u0131mla performans\u0131n\u0131z\u0131 art\u0131r\u0131n ve uygulaman\u0131z\u0131n mimarisini basitle\u015ftirin.\" \/>\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-router-v6-ile-paralel-yonlendirme-nasil-eklenir-parallel-router-tanitimi-\ud83d\ude80\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"React Router v6 ile Paralel Y\u00f6nlendirme Nas\u0131l Eklenir? parallel-router Tan\u0131t\u0131m\u0131 \ud83d\ude80\" \/>\n<meta property=\"og:description\" content=\"React uygulamalar\u0131n\u0131zda karma\u015f\u0131k UI yap\u0131lar\u0131n\u0131 y\u00f6netirken kar\u015f\u0131la\u015ft\u0131\u011f\u0131n\u0131z zorluklara modern bir \u00e7\u00f6z\u00fcm m\u00fc ar\u0131yorsunuz? `parallel-router` ile React Router v6&#039;ya paralel y\u00f6nlendirme \u00f6zelli\u011fini nas\u0131l entegre edebilece\u011finizi ad\u0131m ad\u0131m ke\u015ffedin. Kullan\u0131c\u0131 deneyimini d\u00f6n\u00fc\u015ft\u00fcren bu yeni yakla\u015f\u0131mla performans\u0131n\u0131z\u0131 art\u0131r\u0131n ve uygulaman\u0131z\u0131n mimarisini basitle\u015ftirin.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/react-router-v6-ile-paralel-yonlendirme-nasil-eklenir-parallel-router-tanitimi-\ud83d\ude80\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-22T16:32:43+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=\"24 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/react-router-v6-ile-paralel-yonlendirme-nasil-eklenir-parallel-router-tanitimi-%f0%9f%9a%80\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/react-router-v6-ile-paralel-yonlendirme-nasil-eklenir-parallel-router-tanitimi-%f0%9f%9a%80\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"React Router v6 ile Paralel Y\u00f6nlendirme Nas\u0131l Eklenir? parallel-router Tan\u0131t\u0131m\u0131 \ud83d\ude80\",\"datePublished\":\"2025-10-22T16:32:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/react-router-v6-ile-paralel-yonlendirme-nasil-eklenir-parallel-router-tanitimi-%f0%9f%9a%80\/\"},\"wordCount\":4046,\"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-router-v6-ile-paralel-yonlendirme-nasil-eklenir-parallel-router-tanitimi-%f0%9f%9a%80\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/react-router-v6-ile-paralel-yonlendirme-nasil-eklenir-parallel-router-tanitimi-%f0%9f%9a%80\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/react-router-v6-ile-paralel-yonlendirme-nasil-eklenir-parallel-router-tanitimi-%f0%9f%9a%80\/\",\"name\":\"React Router v6 ile Paralel Y\u00f6nlendirme Nas\u0131l Eklenir? parallel-router Tan\u0131t\u0131m\u0131 \ud83d\ude80\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-22T16:32:43+00:00\",\"description\":\"React uygulamalar\u0131n\u0131zda karma\u015f\u0131k UI yap\u0131lar\u0131n\u0131 y\u00f6netirken kar\u015f\u0131la\u015ft\u0131\u011f\u0131n\u0131z zorluklara modern bir \u00e7\u00f6z\u00fcm m\u00fc ar\u0131yorsunuz? `parallel-router` ile React Router v6'ya paralel y\u00f6nlendirme \u00f6zelli\u011fini nas\u0131l entegre edebilece\u011finizi ad\u0131m ad\u0131m ke\u015ffedin. Kullan\u0131c\u0131 deneyimini d\u00f6n\u00fc\u015ft\u00fcren bu yeni yakla\u015f\u0131mla performans\u0131n\u0131z\u0131 art\u0131r\u0131n ve uygulaman\u0131z\u0131n mimarisini basitle\u015ftirin.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/react-router-v6-ile-paralel-yonlendirme-nasil-eklenir-parallel-router-tanitimi-%f0%9f%9a%80\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/react-router-v6-ile-paralel-yonlendirme-nasil-eklenir-parallel-router-tanitimi-%f0%9f%9a%80\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/react-router-v6-ile-paralel-yonlendirme-nasil-eklenir-parallel-router-tanitimi-%f0%9f%9a%80\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"React Router v6 ile Paralel Y\u00f6nlendirme Nas\u0131l Eklenir? parallel-router Tan\u0131t\u0131m\u0131 \ud83d\ude80\"}]},{\"@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 v6 ile Paralel Y\u00f6nlendirme Nas\u0131l Eklenir? parallel-router Tan\u0131t\u0131m\u0131 \ud83d\ude80","description":"React uygulamalar\u0131n\u0131zda karma\u015f\u0131k UI yap\u0131lar\u0131n\u0131 y\u00f6netirken kar\u015f\u0131la\u015ft\u0131\u011f\u0131n\u0131z zorluklara modern bir \u00e7\u00f6z\u00fcm m\u00fc ar\u0131yorsunuz? `parallel-router` ile React Router v6'ya paralel y\u00f6nlendirme \u00f6zelli\u011fini nas\u0131l entegre edebilece\u011finizi ad\u0131m ad\u0131m ke\u015ffedin. Kullan\u0131c\u0131 deneyimini d\u00f6n\u00fc\u015ft\u00fcren bu yeni yakla\u015f\u0131mla performans\u0131n\u0131z\u0131 art\u0131r\u0131n ve uygulaman\u0131z\u0131n mimarisini basitle\u015ftirin.","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-router-v6-ile-paralel-yonlendirme-nasil-eklenir-parallel-router-tanitimi-\ud83d\ude80\/","og_locale":"tr_TR","og_type":"article","og_title":"React Router v6 ile Paralel Y\u00f6nlendirme Nas\u0131l Eklenir? parallel-router Tan\u0131t\u0131m\u0131 \ud83d\ude80","og_description":"React uygulamalar\u0131n\u0131zda karma\u015f\u0131k UI yap\u0131lar\u0131n\u0131 y\u00f6netirken kar\u015f\u0131la\u015ft\u0131\u011f\u0131n\u0131z zorluklara modern bir \u00e7\u00f6z\u00fcm m\u00fc ar\u0131yorsunuz? `parallel-router` ile React Router v6'ya paralel y\u00f6nlendirme \u00f6zelli\u011fini nas\u0131l entegre edebilece\u011finizi ad\u0131m ad\u0131m ke\u015ffedin. Kullan\u0131c\u0131 deneyimini d\u00f6n\u00fc\u015ft\u00fcren bu yeni yakla\u015f\u0131mla performans\u0131n\u0131z\u0131 art\u0131r\u0131n ve uygulaman\u0131z\u0131n mimarisini basitle\u015ftirin.","og_url":"https:\/\/fatihsoysal.com\/blog\/react-router-v6-ile-paralel-yonlendirme-nasil-eklenir-parallel-router-tanitimi-\ud83d\ude80\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-22T16:32:43+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"24 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/react-router-v6-ile-paralel-yonlendirme-nasil-eklenir-parallel-router-tanitimi-%f0%9f%9a%80\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/react-router-v6-ile-paralel-yonlendirme-nasil-eklenir-parallel-router-tanitimi-%f0%9f%9a%80\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"React Router v6 ile Paralel Y\u00f6nlendirme Nas\u0131l Eklenir? parallel-router Tan\u0131t\u0131m\u0131 \ud83d\ude80","datePublished":"2025-10-22T16:32:43+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/react-router-v6-ile-paralel-yonlendirme-nasil-eklenir-parallel-router-tanitimi-%f0%9f%9a%80\/"},"wordCount":4046,"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-router-v6-ile-paralel-yonlendirme-nasil-eklenir-parallel-router-tanitimi-%f0%9f%9a%80\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/react-router-v6-ile-paralel-yonlendirme-nasil-eklenir-parallel-router-tanitimi-%f0%9f%9a%80\/","url":"https:\/\/fatihsoysal.com\/blog\/react-router-v6-ile-paralel-yonlendirme-nasil-eklenir-parallel-router-tanitimi-%f0%9f%9a%80\/","name":"React Router v6 ile Paralel Y\u00f6nlendirme Nas\u0131l Eklenir? parallel-router Tan\u0131t\u0131m\u0131 \ud83d\ude80","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-22T16:32:43+00:00","description":"React uygulamalar\u0131n\u0131zda karma\u015f\u0131k UI yap\u0131lar\u0131n\u0131 y\u00f6netirken kar\u015f\u0131la\u015ft\u0131\u011f\u0131n\u0131z zorluklara modern bir \u00e7\u00f6z\u00fcm m\u00fc ar\u0131yorsunuz? `parallel-router` ile React Router v6'ya paralel y\u00f6nlendirme \u00f6zelli\u011fini nas\u0131l entegre edebilece\u011finizi ad\u0131m ad\u0131m ke\u015ffedin. Kullan\u0131c\u0131 deneyimini d\u00f6n\u00fc\u015ft\u00fcren bu yeni yakla\u015f\u0131mla performans\u0131n\u0131z\u0131 art\u0131r\u0131n ve uygulaman\u0131z\u0131n mimarisini basitle\u015ftirin.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/react-router-v6-ile-paralel-yonlendirme-nasil-eklenir-parallel-router-tanitimi-%f0%9f%9a%80\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/react-router-v6-ile-paralel-yonlendirme-nasil-eklenir-parallel-router-tanitimi-%f0%9f%9a%80\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/react-router-v6-ile-paralel-yonlendirme-nasil-eklenir-parallel-router-tanitimi-%f0%9f%9a%80\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"React Router v6 ile Paralel Y\u00f6nlendirme Nas\u0131l Eklenir? parallel-router Tan\u0131t\u0131m\u0131 \ud83d\ude80"}]},{"@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\/32518","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=32518"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32518\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=32518"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=32518"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=32518"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}