2016-07-04 25 views
6

Tepki belgeleri, ajax isteğinin componentDidMount yaşam döngüsü olayından başlatılması gerektiğini bildirir (bkz. react docs).React bileşenlerinde componentDidMount'ta neden ajax isteği yapılmalıdır?

Neden bu etkinlik? ajax kullanarak veri yüklenirken

Çoğu durumda

, ben mesela bir yükleme çubuğu çeşit, görüntülemek istediğiniz:

componentDidMount() { 
    this.setState({isLoading: true}); 
    fetch(...) 
     .then(...) 
     .then(() => this.setState({isLoading: false}) 
} 

ama bu render yöntem 3 kez (immediatelly sonra isLoading = true ve ayarlayarak takip kılmasıdır başlangıç ​​yangınlarını componentWillMount olaydan ajax isteği göndermeleri konusunda sorun ne isLoading = false

tarafından?

+0

Muhtemel yinelenen [Neden React dokümanlar componentDidMount'ta değil, componentWillMount öğesinde AJAX yapılmasını önerir?] (Http://stackoverflow.com/questions/27139366/why-do-the-react-docs-recommend-doing-ajax -in-componentdidmount-not-componentwi) – mattias

cevap

3

Eh, isLoading: true başlangıç ​​durumuna, gerek bir parçası olabilir bileşeni => sadece 2 render monte yaptıktan sonra değil 3.

https://github.com/reactjs/react-redux/issues/210 göre, sadece bir kez componentWillMount den render arayarak sonucu setState uyumsuz render sonra adı verilecek olursa, herhangi birşey olacağı anlamına gelir, bunu ayarlamak için etkisi (yorumları doğru anladığımda).

it would "iş" (DEV büyük olasılıkla) dolayısıyla bazen görünür, ancak sonuçları setState ile geri arama render önce yürütebileceği ve böylece hiçbir yükleme ekranı olacağı bir şans olup olmadığından emin ama gerçekte değil o

https://facebook.github.io/react/tips/initial-ajax.html

+0

sorunu düzeltildi, bu nedenle componentWillMount adından çağrılan setState, render işleminden önce geçerli olacaktır. rea docs hala ajax çağrıları componentDidMount – Liero

+0

de yapılması gereken bir açıklama hala yok, 'setState' çağrılmıyorsunuz componentWillMount veya componentDidMount doğrudan, ancak yeni bir async yığını. Çeşitli yöntemlerden canlı etkinlik dinleyicileriyle “bu” ye başvurmak için tam olarak nasıl tepki verildiği konusunda hiçbir fikrim yok. Belgelenmemiş özellikleri kullanıyorsanız, sizin için yeterince korkutucu değil ve belki de gelecek sürümlerde çalışabileceği bir heyecan istemek, sonra özgür hissedin, o kırmak ya da değil – Aprillion

0

Nokta Ayrıca bkz ... Hata ayıklamak çok zor bir yarış durumu olacağını siz de yükleme çubuğunu (: true yükleme) göreceği şekilde bileşen başlangıç ​​durumuna sahip kılmak tepki izin vermek.

Satırı taşıyabilirsiniz: this.setState ({isLoading: true}) componentWillMount() içinde. componentWillMount öğesinde ayarlanma durumu, bileşeninizin yeniden oluşturulmasını tetiklemediğinden. Oluşturma yönteminiz güncellenmiş bileşeni alacaktır.

+0

değil mi bilmem ama çok iyi bir nedene ihtiyacım var this.setState ({isLoading: true}) 'yi ve ajax'ı iki yaşam döngüsü olayına bölün. Ajax çağrısının componentWidMount yerine componentWillMount yerine neden yapılması gerektiğini hala bilmiyorum – Liero