2017-10-06 76 views
0

我的控制檯登錄以下,當我開始我的應用程序:反應 - (嵌套)道具類型無效;它必須是一個函數

警告:無法道具類型:家庭:道具類型home無效;它必須是一個函數

我在網上看了,但沒有看到任何情況下,或返回這個錯誤使我在努力糾正警告嵌套支柱型的例子,這裏是我的代碼:

Home.propTypes = { 
    home: { 
    readyStatus: PropTypes.string, 
    list: PropTypes.arrayOf(PropTypes.object), 
    }, 
    fetchUsersIfNeeded: PropTypes.func, 
}; 

Home.defaultProps = { 
    home:() => {}, 
    readyStatus: '', 
    fetchUsersIfNeeded:() => {}, 
}; 

任何幫助或建議表示讚賞 - 預先感謝您!

+0

另外你我認爲你不應該使用defaultProps並且需要並排 – aks

+0

@aks哎呀,這是我在測試時犯的一個錯誤,從Q –

回答

1

我認爲這個問題是在這樣的事情都寫

Home.propTypes = { 
    home: PropTypes.shape({ 
    readyStatus: PropTypes.string, 
    list: PropTypes.arrayOf(PropTypes.object).isRequired, 
    }), 
    fetchUsersIfNeeded: PropTypes.func, 
}; 

Home.defaultProps = { 
    home: { 
    list: [], 
    readyStatus: '', 
    }, 
    fetchUsersIfNeeded:() => {}, 
}; 

這第一個解決方案使得無論作爲對象相似的類型,它應該工作。其他選項可以是:

Home.propTypes = { 
    home: PropTypes.func, 
    fetchUsersIfNeeded: PropTypes.func, 
}; 

Home.defaultProps = { 
    home:() => {}, 
    fetchUsersIfNeeded:() => {}, 
}; 

這裏我們將prop類型作爲一個函數,以使兩個實例的類型匹配。

快速提示,如果家是一個對象,這是一個狀態,那麼它應該是一個對象,如解決方案1,或者如果家是從其他狀態或網絡調用或任何其他派生的計算值,那麼你應該使用功能。

如果您想要更好地檢查函數的類型,還可以查看flow.org。

請注意,我沒有測試過這段代碼,但它應該可以解決這個問題。

+0

中刪除謝謝,雖然爲什麼第一個檢查器名爲'currentlyHome' –

+0

+第一個例子,不應該將readyStatus嵌套在家中嗎? –

+0

只是犯了這些愚蠢的打字錯誤。現在退房。 – aks

相關問題