2017-08-12 73 views
2

我寫了這個功能getInitialState陣營:getInitialState

getInitialState: function() { 
     axios.get("****url ******").then(res => { 
      myVariable = res.data; 
     }); 
     return {secondsElapsed: 0}; 
    }, 

正如你可以看到有這個功能的諾言,並且代碼可以達到內部的代碼之前「return」語句「然後」承諾。但是,當我運行這段代碼時,我發現在'then'內部的代碼被提交後它總是到達'render'函數。

你知道這有可能嗎?我如何100%保證在到達渲染函數時,'then'內的代碼已經被提交?

+0

在getInitialState中執行ajax調用並不是一個好習慣。你應該做一個Ajax調用iniside'componentDidMount'函數。 –

+0

我知道componentDidMount是在**渲染函數之後提交**的。我需要AJAX結果來呈現頁面。 – CrazySynthax

+1

您需要有一個'loader'變量,它會在您的ajax請求獲取數據時顯示加載狀態。 –

回答

0

你在那裏發送axios的承諾。承諾是異步的,也就是說,無論調用會發生什麼(它是否會成功,然後調用或失敗它的回調函數),代碼的執行流程都不會受到影響。

要實現您的目標,您需要在AJAX調用成功時設置一個狀態。在then()回調中。然後,您可以根據您設置的狀態值進行相應的渲染。

我想提請你注意你的代碼不遵循反應模式。我建議你將你的API調用移到你的主要組件之外並放入一個動作中。然後在主要組件中導入動作,並在getInitialState函數中調用它。