2014-09-26 15 views
30

DOM öğesi (tüm alt düğümler dahil) aslında sayfaya yüklendiğinde ve hazır olduğunda, benim reakt.js bileşenimde çağrılan bir geri çağırma olmasını istiyorum. Özellikle, aynı boyuta sahip olmak istediğim iki bileşenden daha büyük olanı, hangisi daha büyük doğal boyuta sahipse onu seçmem.DOM, tepkisel.js'de yüklendiğinde geri arama

componentDidMount gerçekten istediğim şey değil, çünkü yalnızca bileşen başına bir kez çağrılıyor, ancak bileşen her bittiğinde geri aranmamın yeniden istenmesini istiyorum. En üst düzey DOM öğesine bir onLoad olayı ekleyebileceğimi düşündüm, ancak sanırım bu sadece <body> ve <img> gibi belirli öğeler için geçerlidir.

cevap

33

componentDidMount ve componentDidUpdate'un bir bileşimi işin yapılmasını sağlar. Birincisi, ilk oluşturma işleminden sonra, DOM mevcut olduğu zaman çağrılır, ikincisi, güncellenmiş DOM mevcut olduğunda, sonraki işlemlerden sonra çağrılır. Benim durumumda, ikisinin de aynı şeyi yapmak için ortak bir işleve delege ettim.

5

Tüm sütunların aynı yüksekliğe sahip olması için componentDidUpdate'i tabloya uygulamıyorum. jquery'deki $ (window) .load() ile aynı şekilde çalışır.

örn:

componentDidUpdate: function() { 
     $(".tbl-tr").height($(".tbl-tr ").height()); 
    } 
+0

gibi render, bu yüzden fonksiyonunuz sahne veya durum _changed_ olana kadar uygulanmayacak: https://reactjs.org/docs/react-comp onent.html # componentdidupdate – brianmearns

10

Modern tarayıcılarda componentDidMount içinde

class Comp1 extends React.Component { 
constructor(props) { 
    super(props); 
    this.handleLoad = this.handleLoad.bind(this); 
} 

componentDidMount() { 
    window.addEventListener('load', this.handleLoad); 
} 

handleLoad() { 
    $("myclass") // $ is available here 
} 
} 
1

onload dinleyicisi ekleyin, olması gerektiği Maalesef `componentDidUpdate` ilk çağrısında değildir

try() { 
    if (!$("#element").size()) { 
     window.requestAnimationFrame(try); 
    } else { 
     // do your stuff 
    } 
}; 

componentDidMount(){ 
    this.try(); 
} 
+0

heh, modern tarayıcılar dışında jquery = P'yi kullanmaz. Canlı güncellemenin olması gerektiğini varsayarak, animasyon çerçevesini kullanmanın iyi bir ipucu. – brianmearns