0

我使用終極版在我的簡單反應項目,我設置這應該火的情況下,用戶沒有登錄重定向保護路徑之前未設置。驗證狀態的道具頁面渲染

初始狀態看起來是這樣的:

const INITIAL_STATE = { 
    email: '', 
    password: '', 
    error: '', 
    loading: false, 
    loggedIn: false 
}; 

在我的組件渲染功能如下:

if (!loggedIn) { 
    return (<Spinner />); 
} 

if (loggedIn === false) { 

    return (
    <Redirect to={{ 
     pathname: '/login', 
     state: { from: this.props.location } 
    }} /> 
) 
} 
return (
    <Route {...this.props} /> 
) 

現在,當用戶登錄時,一切正常,顯示微調框直到內容被加載。

問題出現在用戶未登錄時,然後顯示微調器並且沒有其他事情發生,重定向基本上不會被調用。我可以在控制檯中看到狀態僅在運行組件時設置,並且稍後未更新,因爲我沒有調用任何函數。我想知道是否應該在componentWillMount()部分中設置一個額外的函數,或者類似的東西?或者我只是亂搞未定義和錯誤?

回答

0

您有兩條語句檢查相同的東西!loggedIn,它得到第一個語句導致spinner因爲return它不會更進一步。 @grgmo

if (!loggedIn) { 
    return (
    <Redirect to={{ 
     pathname: '/login', 
     state: { from: this.props.location } 
    }} /> 
) 
} 

if (loading) { 
    return (<Spinner />); 
} 

return (
    <Route {...this.props} /> 
) 
+0

感謝 -

假設loading工作得很好,你可以試試這個。其實我現在沒有使用加載,因爲我沒有獲取任何數據。我想知道是否有一種方法來阻止渲染,直到所有的道具完成加載?在這種情況下,我可以在te道具加載時顯示微調器。 – gianni