Dış DOM Mutasyonları
Bazen, DOM'u özgürce değiştirmeyi, içinde durumu korumayı bekleyen veya hiç bileşen sınırı olmayan üçüncü taraf kütüphaneleri ile çalışmak gerekebilir. Bu şekilde çalışan birçok harika UI araç seti veya yeniden kullanılabilir öğe bulunmaktadır.
Preact (ve benzer şekilde React) ile bu tür kütüphanelerle çalışmak, belirli bir Bileşen içinde gerçekleştirilen dış DOM mutasyonlarını geri almaması için Sanal DOM render/diff algoritmasına bilgi vermenizi gerektirir.
Teknik
Bu, bileşeninizde shouldComponentUpdate()
yöntemini tanımlamak ve false
döndürmesini sağlamak kadar basit olabilir:
class Block extends Component {
shouldComponentUpdate() {
return false;
}
}
... veya kısaca:
class Block extends Component {
shouldComponentUpdate = () => false;
}
Bu yaşam döngüsü kancası uygun bir şekilde ayarlandığında ve Preact’a değişiklikler meydana geldiğinde Bileşeni yeniden render etmemesi talimatı verildiğinde, Bileşeniniz artık, Bileşen kaldırılana kadar sabit olarak muamele görecek bir referansa sahiptir.
Herhangi bir bileşen gibi bu referansa basitçe this.base
denir ve render()
işlevinden dönen kök JSX Elemanına karşılık gelir.
Örnek Geçiş
Bileşen için yeniden render etmeyi "kapama" örneği burada. render()
işlevinin hala Bileşeni oluşturma ve monte etme sürecinin bir parçası olarak çağrıldığını unutmayın, başlangıçtaki DOM yapısını oluşturmak için.
class Example extends Component {
shouldComponentUpdate() {
// diffe göre yeniden oluşturma:
return false;
}
componentWillReceiveProps(nextProps) {
// burayı kullanarak gelen özelliklerle bir şey yapabilirsiniz.
}
componentDidMount() {
// şimdi monte edildi, DOM'u özgürce değiştirebiliriz:
let thing = document.createElement('maybe-a-custom-element');
this.base.appendChild(thing);
}
componentWillUnmount() {
// bileşen DOM'dan çıkarılmak üzere, herhangi bir temizleme işlemi yapın.
}
render() {
return <div class="example" />;
}
}
Unutulmamalıdır ki, bileşeninizin davranışlarını kontrol etmek için, gizli bileşen referansı vasıtasıyla DOM üzerinde değişiklikler yapabilirsiniz.
Demonstrasyon
Bu demo'yu Webpackbin'de görüntüleyin
Gerçek Dünya Örnekleri
Alternatif olarak, bu tekniği preact-token-input içinde eylemde görebilirsiniz - DOM’da bir tutacak olarak bir bileşen kullanır, ancak güncellemeleri devre dışı bırakır ve tags-input ‘in devralmasına izin verir. Daha karmaşık bir örnek preact-richtextarea olur, bu teknikle düzenlenebilir bir ``’in yeniden render edilmesini önler.