0Pricing
React Academy · Ders

HOC'yi Özel Hook'a Yeniden Düzenleme

Bir withAuth HOC'sini adım adım useAuth hook'una dönüştürün.

HOC'yi Özel Hook'a Yeniden Düzenleme, CoddyKit'te ücretsiz bir React Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, React Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. React Academy kursu toplamda 4 dersten oluşur.

Hoş Geldiniz

Bu derste withAuth HOC'sini adım adım useAuth özel kancasına yeniden düzenleyecek, kanca sürümünün neden daha temiz ve sınanması daha kolay olduğunu tam olarak göreceksiniz.

withAuth HOC'si (Başlangıç Noktası)

HOC bir bileşen alır, kullanıcının kimliğinin doğrulanıp doğrulanmadığını denetler ve doğrulanmamışsa /login adresine yönlendirir. Kullanıcıyı bir özellik olarak ekler.
function withAuth(Component) {
  return function AuthGuard(props) {
    const { user, loading } = useAuthState();
    if (loading) return <Spinner />;
    if (!user) return <Navigate to="/login" />;
    return <Component {...props} user={user} />;
  };
}

const ProtectedPage = withAuth(MyPage);

HOC ile İlgili Sorunlar

HOC: (1) DevTools'ta bir sarmalayıcı ekler, (2) `user` özelliğini örtük olarak ekler; bileşenin bu özelliği beklemesi gerektiğini bilmesi gerekir, (3) HOC sarmalayıcısının tamamını oluşturmadan sınanması zordur, (4) diğer kancalarla kolayca birleştirilemez.

1. Adım: Mantığı Bir Kancaya Çıkarma

HOC'deki tüm mantığı özel bir kancaya taşıyın. Kanca kimlik doğrulama durumunu doğrudan döndürür; sarmalama veya özellik ekleme gerekmez.
function useAuth() {
  const { user, loading } = useAuthState();
  return { user, loading, isAuthenticated: !!user };
}

2. Adım: Yönlendirmeleri Kancada Yönetme

Yönlendirme mantığını, içeride navigate çağıran ve kullanıcıyı döndüren ayrı bir kancaya (ör. useRequireAuth) taşıyın.
function useRequireAuth(redirectTo = '/login') {
  const { user, loading } = useAuth();
  const navigate = useNavigate();

  useEffect(() => {
    if (!loading && !user) navigate(redirectTo);
  }, [user, loading, navigate, redirectTo]);

  return { user, loading };
}

3. Adım: Bileşeni Güncelleme

HOC sarmalayıcısını bileşenin içinde doğrudan yapılan bir kanca çağrısıyla değiştirin. Bileşen açıkça useRequireAuth çağırır ve yüklemeyi yönetir. Bağımlılığı artık görünür durumdadır.
function MyPage() {
  const { user, loading } = useRequireAuth();
  if (loading) return <Spinner />;
  return <p>Hello, {user.name}</p>;
}

Karşılaştırmalı Avantajlar

Kanca sürümü: (1) DevTools'ta ek sarmalayıcı yoktur, (2) bağımlık açıkça görünür; bileşende `useRequireAuth` ifadesini görürsünüz, (3) kancayı sahteleyerek sınanabilir, (4) aynı bileşendeki diğer kancalarla birleştirilebilir.

Kanca Sürümünü Sınama

Sınamanızda useRequireAuth kancasını, modül dışa aktarımını değiştirerek sahteleyin. Bileşen sınamasında yalnızca bileşeni oluşturmanız ve çıktıyı doğrulamanız gerekir; HOC kurulumu gerekmez.
vi.mock('./useRequireAuth', () => ({
  useRequireAuth: () => ({ user: mockUser, loading: false })
}));

render(<MyPage />);
expect(screen.getByText('Hello, Alice')).toBeInTheDocument();

HOC Ne Zaman Korunmalı

Birçok bileşeni bildirimsel olarak korumanız gerekiyorsa (ör. rota tanımlarında) ve her birine kanca çağrısı eklemek istemiyorsanız HOC'yi koruyun. Hatta HOC'yi kancanın üzerine kurabilirsiniz.
function withAuth(Component) {
  return function (props) {
    const { user, loading } = useRequireAuth();
    if (loading) return <Spinner />;
    return <Component {...props} user={user} />;
  };
}

İki Yaklaşımın da En İyisi

Son mimari: bileşenlerde doğrudan kullanım için bir useRequireAuth kancası, AND bildirimsel rota koruması için bunun üzerine kurulmuş ince bir withAuth HOC'si. İkisi de aynı kanca mantığını paylaşır.

Hızlı Kontrol

Bir bileşeni withAuth HOC'siyle sarmalamak yerine içinde useRequireAuth çağırmanın temel yararı nedir?

Özet

Mantığı özel bir kancaya çıkararak, yan etkileri (yönlendirmeler gibi) kancaya taşıyarak ve kancayı doğrudan bileşende çağırarak HOC'leri kancalara yeniden düzenleyin. Bildirimsel sarmalama gerektiğinde kancanın üzerine ince bir HOC kurun.

Kurs Tamamlandı

Tebrikler! **React Desenleri: Oluşturma Özellikleri ve HOC'ler** kursunu tamamladınız. Artık her iki klasik deseni, bunların ödünlerini ve modern özel kancalara nasıl yeniden düzenleneceklerini anlıyorsunuz.

Sıkça Sorulan Sorular

“HOC'yi Özel Hook'a Yeniden Düzenleme” dersi ücretsiz mi?

Evet — “HOC'yi Özel Hook'a Yeniden Düzenleme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve React Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. React Academy kursu toplamda 4 dersten oluşur.

“HOC'yi Özel Hook'a Yeniden Düzenleme” dersinde ne öğreneceğim?

Bir withAuth HOC'sini adım adım useAuth hook'una dönüştürün. React Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

React Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te React Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“HOC'yi Özel Hook'a Yeniden Düzenleme” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu React Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her React Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Render Props Deseni
  2. Üst Düzey Bileşenler (HOC'lar) Açıklaması
  3. HOC ve Render Props ve Özel Hook'lar
  4. HOC'yi Özel Hook'a Yeniden Düzenleme
← React Academy Sayfasına Dön