CodeBlanks Logo Icon CodeBlanks

Reconciler nedir?

Reconciler'ın diff alma yaptığını öğrenirsin.

Reconciler nedir?

Reconciler, React'in eski ve yeni bileşen ağaçlarını karşılaştırıp değişiklikleri hesaplayan parçasıdır. ReactDOM.render çıktıyı ekrana yazar; reconciler neyin değiştiğini söyler.

Eski ağaca current, yeni ağaca work-in-progress denir. İki ağaç karşılaştırılır ve farklar bir yan etki listesine eklenir.

Bu karşılaştırma diffing olarak bilinir ve O(n) karmaşıklığında çalışır; ağaç tamamen değil, katman katman taranır.

Diffing algoritması

Diffing, iki ağacı karşılaştırırken üç varsayım yapar: farklı tipteki elemanlar farklı ağaç üretir, aynı tipteli elemanlar aynı konumu korur ve key ile liste öğeleri eşleştirilir.

Bu varsayımlar sayesinde ağaç O(n)'de taranır. Tüm ihtimaller denenseydi O(n³) olurdu.

key olmazsa React listedeki öğeleri konuma göre eşleştirir; bu da gereksiz DOM güncellemelerine yol açar.

Uygulama reconcile fonksiyonunu yaz

reconcile fonksiyonu yaz. oldNode ve newNode parametreleri alsın. if (oldNode.type !== newNode.type) ile return { action: 'replace', node: newNode }. if (oldNode.props !== newNode.props) ile return { action: 'update', node: newNode }. Son olarak return { action: 'skip' }. Dışa aktar.

Başlangıç kodu

App.jsx
// reconcile fonksiyonunu buraya yaz

Örnek çözüm

App.jsx
function reconcile(oldNode, newNode) {
  if (oldNode.type !== newNode.type) {
    return { action: 'replace', node: newNode };
  }
  if (oldNode.props !== newNode.props) {
    return { action: 'update', node: newNode };
  }
  return { action: 'skip' };
}
export default reconcile;

Soru ve cevaplar

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

1 Reconciler ne yapar?

  • CSS stillerini uygular
  • İki ağacı karşılaştırır ve farkları hesaplar Doğru cevap
  • HTTP istekleri gönderir
  • TypeScript tipleri üretir

Açıklama: Reconciler diffing ile değişiklikleri bulur.

2 Boşluğu doldur: listeye key ekle

Soru
{items.map(item => <li ____={item.id}>{item.name}</li>)}
Cevap
{items.map(item => <li key={item.id}>{item.name}</li>)}

Açıklama: key ile liste öğeleri doğru eşleştirilir.

3 Reconciler kavramlarını eşleştir

Kavram Anlamı
current Eski ağaç
work-in-progress Yeni ağaç
diffing Karşılaştırma
key Liste eşleştirme

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