componentDidMountDOM 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?
componentDidMountDOM 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:
componentDidMountyan etkiler içindir. Olay dinleyicileri, AJAX ekleme, DOM'u değiştirme vb.
componentWillMountnadiren 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 componentWillMountaynı amaca hizmet ettiği için sınıf bileşenlerinden kaldırılmasından bahsediliyor. createClassBileşenlerde kalacaktır .
componentWillMount? Ayrımı gerçekten görmüyorum.
componentWillMountoluşturmada yürütüldüğünü göreceksiniz. componentDidMountWheras 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 componentWillMountama ç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 componentDidMountajax çağrılarınız için kullanmaya devam etmelisiniz .
setStatebir 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 componentWillMountyeniden oluşturmayı tetiklemeyecektir. AJAX çağrısı engellemiyorsa ve Promisebaş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 componentWillMountbir 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.
componentWillMountilk işlemeden önce yeni bir durum tanımlandığı için yeniden oluşturmayı tetiklemez. Ancak setStatebir 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.