2016-09-29 20 views

cevap

22

, 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

+1

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

+0

@ danday74, evet doğru Cevabını yazdığımda muhtemelen özledim. Eğer cevabın üstesinden gelmeyi düşünün –

+0

Evet Ben onvotededim 10 gün önce :) – danday74

1

bileşen yüklenmemiş olacak, bu sayfayı doldurunuz

1

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

,

9

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.

İlgili konular