CodeBlanks Logo Icon CodeBlanks

Hook kompozisyonu

Hook'ları birleştirmeyi öğrenirsin.

Hook kompozisyonu nedir?

Hook kompozisyonu birden çok hook'u tek bir özel hook içinde birleştirmektir. Böylece karmaşık mantık tek bir çağrıda gizlenir; bileşenler sade kalır. Özel hook'lar da başka hook'ları çağırabildiği için bu doğal bir yaklaşımdır.

Örnek: useUserStatus adında bir hook, useToggle ve useCounter'ı birleştirip kullanıcı çevrimiçi sayısını ve menü durumunu tek seferde yönetebilir. Bileşen yalnızca const [count, toggle] = useUserStatus() yazar; ayrıntılar arkada kalır. Bu, büyük uygulamalarda yeniden kullanılabilirliği artırır.

Kompozisyon örneği

Bir useGameScore hook'u hem useCounter hem usePrevious'ı birleştirebilir. Skor artırılırken eski skor da gösterilir; böylece oyuncu son hamlenin getirisini görür. Bileşen yalnızca const [score, increment, prev] = useGameScore() yazar.

Kompozisyon yaparken her bir alt hook'un bağımsız çalışabildiğinden emin olmalısın. Hook'lar arasında state paylaşımı gerekirse bunu parametre ve dönüş değeriyle yap; doğrudan dışarıdan değer atamaktan kaçın. Bu yaklaşım hem test kolaylığı hem de yeniden kullanılabilirlik sağlar.

Uygulama İki hook'u birleştir

useScoreWithPrev özel hook'unu yaz. İçinde useCounter(0) ve usePrevious(count)'i çağır. Hook [count, increment, prev] döndürsün.

Başlangıç kodu

App.js
// useCounter ve usePrevious'ı içe aktar

// useScoreWithPrev özel hook'unu yaz
// useCounter ile count ve increment al
// usePrevious ile prev al
// [count, increment, prev] döndür

Örnek çözüm

App.js
import { useCounter, usePrevious } from "./hooks";

function useScoreWithPrev() {
  const [count, increment] = useCounter(0);
  const prev = usePrevious(count);
  return [count, increment, prev];
}

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Hook'u çağır

Soru
function useFeature() {
  const [count, increment] = ____(0);
  return [count, increment];
}
Cevap
function useFeature() {
  const [count, increment] = useCounter(0);
  return [count, increment];
}

Açıklama: useCounter çağrısı ile değerler alınır.

2 Kompozisyon senaryosu

Kavram Anlamı
useCounter Skor artırır
usePrevious Eski skoru verir
useToggle Menüyü açar
useGameScore Üçünü birleştirir

3 Kompozisyon ne kazandırır?

App.js
function useGameScore() {
  const [score] = useCounter(0);
  const prev = usePrevious(score);
  return [score, prev];
}
  • Daha yavaş çalışmayı
  • Daha az yeniden kullanılabilirliği
  • Tek çağrıda çok mantık Doğru cevap
  • Daha uzun bileşenleri

Açıklama: Kompozisyon tek çağrıda çok mantık sunar.

Orta seviye bölümündeki tüm dersler