CodeBlanks Logo Icon CodeBlanks

Context + useReducer

Context ile global bir useReducer state yönetmeyi öğrenirsin.

Context + useReducer

Büyük state'lerde useState yetersiz kalır. useReducer + context birleşimi, küresel state yönetimi için klasik bir desendir. Redux benzeri bir yapı elde edilir.

Yapı: const [state, dispatch] = useReducer(reducer, initial);. Sonra <StateContext.Provider value={ '{ state }' }><DispatchContext.Provider value={ '{ dispatch }' }>...</DispatchContext.Provider></StateContext.Provider> ile sar.

State ve dispatch ayrı context'lerde tutulursa, yalnızca dispatch kullanan bileşenler state değişiminden etkilenmez. Bu, önceki dersin performans ipucuyla aynı yöntemdir.

İç içe Provider

İki context'i iç içe sarmak yaygın bir desendir. Dışta StateContext.Provider, içte DispatchContext.Provider. İkisi de aynı useReducer çağrısının sonucunu paylaşır.

Sarmalama sırası önemli değildir ama okunurluk için state önce, dispatch sonra önerilir. Tüketen bileşenler istediği context'i bağımsız okur.

Bu desen, bileşen ağacının herhangi bir yerinden dispatch({ '{ type: "ADD" }' }) çağrısı yapmaya izin verir. State'i değiştiren tek yer reducer olduğu için akış öngörülebilir kalır.

Uygulama AppProvider yaz

Aşağıdaki iskeleti tamamla. AppProvider bileşeni yaz. useReducer(reducer, initialState) çağır; [state, dispatch] olarak çöz. <StateContext.Provider value={ '{ state }' }> içinde <DispatchContext.Provider value={ '{ dispatch }' }>...</DispatchContext.Provider></StateContext.Provider> döndür; çocukları children prop'undan al. Dışa aktar.

Başlangıç kodu

App.jsx
// AppProvider bileşenini buraya yaz

Örnek çözüm

App.jsx
function AppProvider({ children }) {
  const [state, dispatch] = useReducer(reducer, initialState);
  return (
    <StateContext.Provider value={state}>
      <DispatchContext.Provider value={dispatch}>
        {children}
      </DispatchContext.Provider>
    </StateContext.Provider>
  );
}

export default AppProvider;

Soru ve cevaplar

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

1 useReducer ne döndürür?

  • [value, setValue]
  • tek değer
  • [state, dispatch] Doğru cevap
  • [data, error]

Açıklama: useReducer [state, dispatch] döndürür.

2 Dispatch görevi

Soru
Dispatch, aksiyon nesnesini ____ fonksiyonuna gönderir.
Cevap
Dispatch, aksiyon nesnesini reducer fonksiyonuna gönderir.

Açıklama: Dispatch, reducer'a aksiyon gönderir.

3 useReducer + context adımlarını eşleştir

Kavram Anlamı
useReducer [state, dispatch]
StateContext state tutar
DispatchContext dispatch tutar
dispatch aksiyon

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