所以,我有一個網站與反應路由器和終極版(下面的例子是嚴重簡化)爲什麼我會得到使用反應路由器和嵌套組件
<Route path="/" component={ A } >
<Route path="/B" component={B} />
</Route>
A.jsx
失敗道具類型class A extends Component {
render() {
const calculated_value_to_pass_down = FooBar()
return (
<div>
{React.Children.map(this.props.children,
(child) => React.cloneElement(child, {
required_prop: calculated_value_to_pass_down
})
)}
</div>
)
}
}
export default A
B.jsx
class B extends Component {
render() {
return (
<div>
{ this.props.required_prop }
</div>
)
}
}
B.propTypes = {
required_prop: PropTypes.any.isRequired
}
export default B
但是,當我去localhost:8080/B
我得到一個錯誤回溯:
Warning: Failed prop type: The prop `required_prop` is marked as required in `B`, but its value is `undefined`.
in A (created by RouterContext)
in RouterContext (created by Router)
in Router
in Provider
的100頁%的作品。這個錯誤在生產中不會發生,但我討厭顯示出來的錯誤。
頁面從來沒有真正使用未定義的道具進行渲染,甚至在渲染被調用之前我得到錯誤。
我知道我可以簡單地刪除.isRequired,它會工作,但這個想法聞起來很爛。
謝謝!
你在哪裏傳遞道具成分B? –
'calculated_value_to_pass_down'未定義? @MayankShukla裏面'React.cloneElement'我相信 – DroidNoob
當我做'console.log(this.props.required_prop)'上的B.jsx的render方法我總是得到一個值,從來沒有'undefined' –