componentDidMount
DOM erişimi gerektiren her şey için neden uygun olduğunu anlıyorum , ancak bir AJAX isteğinin buna zorunlu olarak veya genellikle ihtiyaç duymadığını anlıyorum .
Ne oluyor?
componentDidMount
DOM erişimi gerektiren her şey için neden uygun olduğunu anlıyorum , ancak bir AJAX isteğinin buna zorunlu olarak veya genellikle ihtiyaç duymadığını anlıyorum .
Ne oluyor?
Yanıtlar:
componentDidMount
yan etkiler içindir. Olay dinleyicileri, AJAX ekleme, DOM'u değiştirme vb.
componentWillMount
nadiren faydalıdır; özellikle sunucu tarafı oluşturmayı önemsiyorsanız (olay dinleyicileri eklemek hatalara ve sızıntılara ve ters gidebilecek birçok başka şeye neden olur).
Yapıcıyla componentWillMount
aynı amaca hizmet ettiği için sınıf bileşenlerinden kaldırılmasından bahsediliyor. createClass
Bileşenlerde kalacaktır .
componentWillMount
? Ayrımı gerçekten görmüyorum.
componentWillMount
oluşturmada yürütüldüğünü göreceksiniz. componentDidMount
Wheras kullanıyor olsaydın, bu sadece müşteri tarafında yürütülecekti. Sonuç olarak componentWillMount
, dış etkileşimleri gerçekleştiren veya olaylara bağlanan şeyler koymak harika bir fikir değildir. Bileşenlerinizi sunucu tarafında işleme planınız yoksa, bu yalnızca potansiyel kod taşınabilirliği için hala iyi bir fikir değildir. Tüm bunlar, @daniula'nın cevabında açıklanan kötü olmasının ana sebebinin dışında.
Ben de başlangıçta aynı sorunu yaşadım. Ben de istekte bulunmayı denemeye karar verdim componentWillMount
ama çeşitli küçük sorunlara yol açtı.
Ajax çağrısı yeni verilerle bittiğinde oluşturmayı tetikliyordum. Bir noktada bileşenin oluşturulması sunucudan yanıt almaktan daha fazla zaman aldı ve bu noktada ajax geri çağrısı, bağlanmamış bileşen üzerinde işlemeyi tetikliyordu. Bu biraz uç durumdur, ancak muhtemelen daha fazlası vardır, bu nedenle bağlı kalmak daha güvenlidir componentDidMount
.
componentWillMount
, bu nedenle componentDidMount
ajax çağrılarınız için kullanmaya devam etmelisiniz .
setState
bir bileşen yapıcısını çağırmamalısınız ve AJAX çağrısının ne zaman tamamlanacağını belirlemenin hiçbir yolu yoktur. twitter.com/dan_abramov/status/576453138598723585
Belgelere göre durumu ayarlayarak componentWillMount
yeniden oluşturmayı tetiklemeyecektir. AJAX çağrısı engellemiyorsa ve Promise
başarılı olduğunda bileşenin durumunu güncelleyen bir döndürürseniz , bileşen oluşturulduktan sonra yanıtın gelmesi ihtimali vardır. Gibi componentWillMount
bir tetiklemez İstemiş verilerle render bileşen varlıktır Beklediğiniz davranışı olmaz yeniden-işlemek.
Akı kitaplıklarından herhangi birini kullanırsanız ve istenen veriler, bileşenin bağlı olduğu depoda son bulursa (veya bağlı bir bileşenden devralırsa) bu bir sorun olmayacaktır çünkü bu verilerin alımı büyük olasılıkla sahne değiştirecektir. Sonuçta.
componentWillMount
ilk işlemeden önce yeni bir durum tanımlandığı için yeniden oluşturmayı tetiklemez. Ancak setState
bir AJAX geri aramasında çağrılırsa, kesinlikle ilk işlemeden sonra çağrılır ve yeniden oluşturmayı tetikler.
componentWillMount
, bileşenin takılmadığı göz önüne alındığında başarısız olur.