React Router, React uygulamalarında yönlendirme için güçlü bir kütüphanedir. Basit rotaları etkili bir şekilde işlerken, gerçek gücü esnek ve dinamik yol eşleştirmesi için düzenli ifadeler (regex) kullanıldığında ortaya çıkar. Bu makale, çeşitli karmaşıklık seviyelerini kapsayarak, regex’i React Router yollarınıza entegre etmenize rehberlik edecektir.
İçerik Tablosu
- React Router’da Regex Anlama
- Temel Regex Uygulama
- Gelişmiş Regex Kalıpları
- En İyi Uygulamalar ve Optimizasyon
- Yaygın Sorunların Giderilmesi
React Router’da Regex Anlama
Düzenli ifadeler (regex veya regexp), dizeler içindeki desen eşleştirme için kullanılan araçlardır. React Router’da, dinamik URL segmentleri için esneklik sağlayarak, basit dize eşleştirmenin ötesinde rota tanımlarına olanak tanırlar. Kesin yollar yerine, regex kalıpları eşleştirir ve değişen parametreleri veya formatları karşılar. React Router, standart JavaScript regex’e göre biraz değiştirilmiş bir sözdizimi sunan path-to-regexp
kütüphanesini kullanır, ancak temel kavramlar tutarlı kalır.
Temel Regex Uygulama
React Router yollarında regex kullanmanın en basit yolu, iki nokta üst üste (:
) parametre adlarıyla birleştirmek ve regex’i süslü parantezler {}
içine almaktır. Örneğin, id
‘nin bir sayı olduğu /users/:id
ile eşleşen bir rota oluşturmak için:
import { BrowserRouter as Router, Route, Routes } from 'react-router-dom';
function App() {
return (
<Router>
<Routes>
<Route path="/users/:id([0-9]+)" element={} />
{/* Diğer rotalar */}
</Routes>
</Router>
);
}
function UserProfile({ params }) {
const userId = params.id;
return <div>Kullanıcı Profili: {userId}</div>;
}
Burada, :id([0-9]+)
, bir veya daha fazla rakamla eşleşmesi gereken id
parametresini tanımlar. Eşleşen değer, UserProfile
bileşenindeki params
nesnesinde erişilebilir. /users/123
adresine gidildiğinde, bileşen userId
“123” olarak işlenir, ancak /users/abc
eşleşmez.
Gelişmiş Regex Kalıpları
React Router, gelişmiş regex özelliklerini destekler:
- Niteleyiciler: Karakter veya grup oluşumlarını belirtmek için
*
,+
,?
,{n}
,{n,}
,{n,m}
. - Karakter sınıfları: Karakter kümelerini eşleştirmek için
[abc]
,[a-z]
,[^abc]
. - Bağlantı noktaları: Konumu zorlamak için
^
(başlangıç),$
(bitiş). - Alternatif: Birden fazla kalıbı belirtmek için
|
. - Yakalama grupları: Eşleşen dize parçalarını yakalamak için
()
. - Özel karakterlerden kaçma: Regex meta karakterlerinden kaçmak için
.
Örnek:
<Route path="/products/:productId(d{5}-d{3})" element={} />
Bu, XXXXX-XXX
(beş rakam, bir tire ve üç rakam) biçiminde ürün kimliklerini eşleştirir.
En İyi Uygulamalar ve Optimizasyon
En iyi performans ve okunabilirlik için:
- Kısa tutun: Aşırı karmaşık regex kalıplarından kaçının. Basit kalıplar daha hızlıdır.
- Kapsamlı bir şekilde test edin: Regex’inizin amaçlanan URL’lerle doğru bir şekilde eşleştiğinden ve sınır durumlarını işlediğinden emin olun.
- Adlandırılmış yakalama gruplarını kullanın (mümkünse): Doğrudan adlandırılmış yakalama grubu desteği sınırlı olsa da, regex’inizi numaralandırılmış yakalama grupları kullanacak şekilde yapılandırmak ve bunların kodunuzdaki anlamını açıkça belgelemek, okunabilirliği ve sürdürülebilirliği artırır.
- Performansa öncelik verin: Son derece karmaşık yönlendirme senaryoları için, performans darboğazlarını belirlemek üzere uygulamanızı profile alın. Aşırı karmaşık regex’i yeniden yapılandırmayı veya özel ara yazılım gibi alternatif yaklaşımları araştırmayı düşünün.
Yaygın Sorunların Giderilmesi
- Regex eşleşmiyor: Regex’inizdeki hataları iki kez kontrol edin. Çevrimiçi regex test edicileri yardımcı olabilir. Regex’inizin rota tanımında doğru bir şekilde parantez içine alındığından emin olun.
- Beklenmedik davranış: Regex’inizi ve
path-to-regexp
kütüphanesinin söz dizimiyle nasıl etkileşimde bulunduğunu dikkatlice inceleyin. Sorunları belirlemek için çeşitli girdilerle test edin. - Performans sorunları: Performans darboğazlarını belirlemek için uygulamanızı profile alın. Performans kritikse regex’inizi basitleştirmeyi veya alternatif stratejiler araştırmayı düşünün.