React Farklılıkları
Preact, React'ın yeniden uygulanması olarak tasarlanmamıştır. Aralarında farklılıklar vardır. Bu farklılıkların birçok tanesi önemsizdir ya da tamamen ortadan kaldırılabilir; preact-compat kullanarak, bu Preact üzerinde React ile %100 uyumluluk sağlamayı amaçlayan ince bir katmandır.
Preact'ın her bir React özelliğini dahil etmeye çalışmamasının nedeni, küçük ve odaklanmış kalmaktır - aksi takdirde React projesine optimizasyonlar sunmak daha mantıklı olacaktır; zaten çok karmaşık ve iyi tasarlanmış bir kod tabanıdır.
Sürüm Uyumluluğu
Preact ve preact-compat için sürüm uyumluluğu, React'ın mevcut ve önceki ana sürümleri ile ölçülmektedir. React ekibi yeni özellikler duyurduğunda, bunlar Proje Hedefleri'ne göre mantıklı olduğu takdirde Preact'ın çekirdeğine eklenebilir. Bu, sürekli tartışma ve açık bir şekilde yapılan kararlarla gelişen oldukça demokratik bir süreçtir; sorunlar ve çekme istekleri kullanılarak.
Bu nedenle, web sitesi ve belgeler, uyumluluğu veya karşılaştırmaları tartışırken React
0.14.x
ve15.x
sürümlerini yansıtmaktadır.
— Dikkat edilmesi gereken önemli bir nokta.
Neler Dahil?
- ES6 Sınıf Bileşenleri
- Sınıflar, durumlu bileşenleri tanımlamak için ifade edici bir yol sağlar.
- Yüksek-Düzen Bileşenleri
render()
'dan diğer bileşenleri döndüren bileşenler, etkili bir şekilde sarmalayıcılardır.
- Durumsuz Saf Fonksiyonel Bileşenler
props
'ı argüman olarak alan ve JSX/VDOM döndüren fonksiyonlardır.
- Bağlamlar: Eski
context API
desteği Preact 3.0'da eklenmiştir.- Yeni API desteği PR #963 olarak tartışılmaktadır.
- Referanslar: Fonksiyon referansları Preact 4.0'da eklenmiştir. Dize referansları
preact-compat
içinde desteklenmektedir.- Referanslar, oluşturulan elementlere ve alt bileşenlere atıfta bulunmanın bir yolunu sağlar.
- Sanal DOM Farklılaştırma
- Bu bir zorunluluktur - Preact'ın farkı basit ama etkilidir ve son derece hızlıdır.
Daha fazla bilgi için hyperscript hakkında okuyabilirsiniz; h()
işlevi ile ilgili birçok ek bilgi barındırıyor.
h()
,React.createElement
'in daha genel bir versiyonu- Bu fikir aslında hyperscript olarak adlandırılıyordu ve React ekosisteminin çok ötesinde değere sahiptir; bu nedenle Preact orijinal standardı teşvik etmektedir. (Oku: neden
h()
?) - Ayrıca biraz daha okunaklı:
h('a', { href:'/' }, h('span', null, 'Ana Sayfa'))
- Bu fikir aslında hyperscript olarak adlandırılıyordu ve React ekosisteminin çok ötesinde değere sahiptir; bu nedenle Preact orijinal standardı teşvik etmektedir. (Oku: neden
Neler Eklenmiş?
Preact, aslında React topluluğundaki çalışmalardan ilham alan bazı kullanışlı özellikler ekler:
this.props
vethis.state
render()
fonksiyonuna sizin için geçirilir- Yine de onları manuel olarak referans alabilirsiniz. Bu sadece daha temiz, özellikle de destructuring kullanırken.
- DOM güncellemelerinin gruplandırılması,
setTimeout(1)
kullanılarak debounc edilmiş veya toplanmıştır (requestAnimationFrame de kullanılabilir) - CSS sınıfları için sadece
class
kullanabilirsiniz.className
hala desteklenir, ancakclass
tercih edilir. - Bileşen ve element geri dönüşümü/pooling.
Neler Eksik?
- PropType Doğrulaması: Herkes PropTypes kullanmaz, bu nedenle Preact'ın çekirdeğinin bir parçası değildir.
- PropTypes tamamen desteklenmektedir preact-compat içinde, ya da bunları manuel olarak kullanabilirsiniz.
- Çocuklar: Preact içinde gerekli değildir, çünkü
props.children
her zaman bir Dizi'dir.React.Children
, preact-compat içinde tamamen desteklenmektedir.
- Sentetik Olaylar: Preact'ın tarayıcı destek hedefi, bu ekstra yükü gerektirmemektedir.
- Preact, olay işleme için tarayıcının yerel
addEventListener
'ını kullanır. DOM olay işleyicilerinin tam listesi için GlobalEventHandlers’e bakın. - Tam bir olay uygulaması daha fazla bakım ve performans endişeleri, ve daha büyük bir API anlamına gelir.
- Preact, olay işleme için tarayıcının yerel
Neler Farklı?
Preact ve React arasında bazı daha ince farklılıklar vardır:
render()
üçüncü bir argümanı kabul eder; bu, değiştirilecek kök düğümüdür, aksi takdirde ekler. Gelecek bir sürümde, belki kök düğümünü denetleyerek bir değiştirme render'ının uygun olduğuna otomatik olarak karar verir.- Bileşenler
contextTypes
veyachildContextTypes
implementasyonu yapmaz. Çocuklar,getChildContext()
'dan çekilen tümcontext
girişlerini alır.