Ben benim bileşeni tepki bağlantısını kesmeniz gerekir bir usecase var. Ancak bazı durumlarda, belirli tepki bileşeni, farklı bir işlev tarafından kaldırılır. Dolayısıyla, I bileşeni olarak ayırmadan önce monte edilmiş olup olmadığını kontrol etmek gerekir. isMounted()
resmi olarak artık ediliyor yanaReaksiyon bileşeninin ayrılıp ayrılmadığını kontrol etmenin bir yolu var mı?
cevap
, kendi bileşeninde yapabilirsiniz:
componentDidMount() {
this._ismounted = true;
}
componentWillUnmount() {
this._ismounted = false;
}
Kendi state
değişkeni sürdürmenin Bu desen ReactJS belgelerinde ayrıntılı çıkmaktadır: i bulmuştur https://facebook.github.io/react/blog/2015/12/16/ismounted-antipattern.html
bileşen yüklenmemiş olacak, bu sayfayı doldurunuz
Buraya geldim çünkü polling
API'yi durdurmanın bir yolunu arıyordum.
react docswebsocket
davayı kapağı yok, ama yoklama biri.
Ben çalıştığını
// React component
let allowPolling = true
React.createClass({
poll() {
if (!allowPolling) {
return
}
// otherwise, call the api
}
componentWillMount() {
allowPolling = true
}
componentWillUnmount() {
allowPolling = false
}
})
çalıştı şekilde. Umarım yardımcı olur
,
Ben Shubham cevap kullanarak durdurmak için kendi kodunu geçiş için ihtiyacı olan insanlar için tepki önerdiği bir çözüm olduğunu düşünüyorum] = siz Bunun için herhangi bir başarısız test durumu biliyorsanız lütfen haber verin isMounted
anti-pattern.
Bu kötü olmayabilir, ama bu soruna gerçek çözümler listeleme değer.
The article linked by Shubham bu anti desen önlemek için 2 öneriler sunar. İhtiyacınız olan şey, bileşen takılı değilken neden setState çağıracağınıza bağlıdır. Eğer bileşeninde bir Akı mağaza kullanıyorsanız
, sen
class MyComponent extends React.Component {
componentDidMount() {
mydatastore.subscribe(this);
}
render() {
...
}
componentWillUnmount() {
mydatastore.unsubscribe(this);
}
}
Eğer ES6, sen yapmak için verdiğin sözü kaydırmak gerekebilir vaat kullanırsanız componentWillUnmount içinde abonelikten gerekir o cancelable.
const cancelablePromise = makeCancelable(
new Promise(r => component.setState({...}}))
);
cancelablePromise
.promise
.then(() => console.log('resolved'))
.catch((reason) => console.log('isCanceled', reason.isCanceled));
cancelablePromise.cancel(); // Cancel the promise
bağlantılı makalede daha fazla yaklaşık
makeCancelable
okuyun. Sonuç olarak, değişkenleri ayarlayarak ve bileşenin takılı olup olmadığını kontrol ederek bu sorunu düzeltmeye çalışmayın, sorunun kökenine gidin. Üste Herhangi biriyle gelebilirseniz, lütfen diğer yaygın vakalarla yorum yapın.
- 1. Çerezin httponly olup olmadığını kontrol etmenin bir yolu var mı?
- 2. Yüklediğiniz hangi gulp versiyonunu kontrol etmenin bir yolu var mı?
- 3. Koddan izin alma iznini kontrol etmenin bir yolu var mı?
- 4. Kabarcık tıklamayı tetikleyip tetiklemediğini kontrol etmenin bir yolu var mı?
- 5. UITableView scrollToRowAtIndexPath üzerinde animasyonu kontrol etmenin bir yolu var mı?
- 6. (Rails) Alanın veri türünü kontrol etmenin bir yolu var mı?
- 7. Aynı reaksiyon bileşeninin birden fazla örneği
- 8. Bir apk'nın gizlenip gizlenmediğini tespit etmenin bir yolu var mı?
- 9. "isForEachable" için bir değişken test etmenin bir yolu var mı
- 10. shapely.geometry.shape.contains (a_point) çağrısının hızını optimize etmenin bir yolu var mı?
- 11. Eşzamansız bir yöntemi senkronize etmenin genel bir yolu var mı?
- 12. Bir uyarı kutusunun kaynağını elde etmenin bir yolu var mı?
- 13. Bir değişkenin JavaScript’te bir Tarih olup olmadığını kontrol etmenin bir yolu var mı?
- 14. Scaladoc'u IntelliJ Idea'ye entegre etmenin kolay bir yolu var mı?
- 15. C++ için doxygen'i optimize etmenin bir yolu var mı?
- 16. SQLAlchemy Bağlantısını test etmenin bir yolu var mı?
- 17. Bilgisayarımda 4K çözünürlüğünü simüle etmenin bir yolu var mı?
- 18. TabControl.Items.CurrentChanging işlemini iptal etmenin bir yolu var mı?
- 19. Kalan animasyon süresini elde etmenin bir yolu var mı?
- 20. Sözlükteki öğelerin sıralamasını takip etmenin bir yolu var mı?
- 21. Konsolda bir komutun performansını Ruby on Rails'de kontrol etmenin bir yolu var mı?
- 22. Bir fasulyenin bahar bağlamında tanımlanmış olup olmadığını kontrol etmenin bir yolu var mı?
- 23. @ Açma teli, Açısal 2'deki bir bileşen içinde kontrol etmenin bir yolu var mı?
- 24. JIRA'da belirli bir kullanıcı tarafından kaydedilen iş geçmişini kontrol etmenin bir yolu var mı?
- 25. HERHANGİ bir sütunun NULL olup olmadığını kontrol etmenin hızlı bir yolu var mı?
- 26. Bir kullanıcının uygulamanızı uygulama mağazasında değerlendirip değerlendirmediğini kontrol etmenin bir yolu var mı?
- 27. Java'da bir değişken tanımlanmış olup olmadığını kontrol etmenin bir yolu var mı?
- 28. Bir öğenin zaten ona uygulanmış jquery select2 olup olmadığını kontrol etmenin bir yolu var mı?
- 29. Silverlight'ta bir DataGrid'in Odaklanıp odaklanmadığını kontrol etmenin bir yolu var mı?
- 30. İlgili bir nesnenin önceden getirilip getirilmediğini kontrol etmenin bir yolu var mı?
Bu sayede kullanarak Ancak ... Bahşiş için ... dokümanlardan ... Sadece componentDidMount true bir _isMounted özelliğini ayarlayın ve componentWillUnmount false olarak ayarlayın.setState ({mounted: false}); Durum değişikliklerinin hemen gerçekleşmemesi nedeniyle uyarıyı engellemek için çok geç tetikleyebilir - sadece bunun için bir sınıf özelliği kullanmanız daha iyi ... this.mounted = false - teşekkürler tho, bu bana doğru yönde işaret etti – danday74
@ danday74, evet doğru Cevabını yazdığımda muhtemelen özledim. Eğer cevabın üstesinden gelmeyi düşünün –
Evet Ben onvotededim 10 gün önce :) – danday74