[英]React: Invalid prop type Link when using JSX
以下是我正在做的傻瓜版
當單擊“跳過”按鈕時,我從隨機的“頁面”中獲取信息,然后使用this.state進行顯示。
import React from "react"
import { Link } from 'react-router'
const MyComponent = React.createClass({
getRandomPage () {
var pages = [
{
link: "/1_page_one",
title: "title one",
description: "Description1"
},
{
link: "/2_page_two",
title: "title Two",
description: "Description2"
},
{
link: "/3_page_three",
title: "title three",
description: "Description3"
}
]
var randomNum = Math.floor(Math.random() * pages.length);
this.setState({page: pages[randomNum]});
},
getInitialState () {
return {
page: "hi"
}
},
render () {
console.log(this.state.page.link);
return (
<div>
<div>
<li><Link to="/1_page_one"><button type="submit">To Page</button></Link></li>
<li><button onClick={this.getRandomPage} type="submit">Skip</button></li>
</div>
</div>
<div>
<h1>{this.state.page.title}</h1>
<h2>Description</h2>
<div>
{this.state.page.description}
</div>
</div>
);
}
});
export default MyComponent;
一切似乎都正常,除非我嘗試更改
<li><Link to="/1_page_one"><button type="submit">To Page</button></Link></li>
至
<li><Link to={this.state.page.link}><button type="submit">To Page</button></Link></li>
我收到一條錯誤消息:
main.js:8715 Warning: Failed prop type: Invalid prop `to` supplied to `Link`.
in Link (created by ChallengeBoxes)
in ChallengeBoxes (created by MainContent)
in div (created by MainContent)
in MainContent (created by RouterContext)
in div (created by App)
in App (created by RouterContext)
in RouterContext (created by Router)
in Router
但是當檢查以了解其價值時
console.log(this.state.page.link);
狀態鏈接是否為正確的字符串,例如“ / 1_page_one”?
怎么了
在第一個渲染上,您的page
狀態沒有任何link
屬性,因此為Link
組件提供了一個null
(無效)值。
您可以通過在初始值中添加一個來解決此問題:
getInitialState () {
return {
page: {
title: "hi",
description: "Homepage",
link: "/0_home"
}
}
},
this.setState({page: pages[randomNum]})
組件時,不會調用getRandomPage()
this.setState({page: pages[randomNum]})
。 因此,當this.state.page.link
尚未undefined
時,初始渲染將遇到錯誤,但是一旦您按下按鈕,您的this.state.page.link
包含一些內容。
更改您的初始狀態可能是:
getInitialState () {
return {
page: {
title: 'something...',
link: '/1_page_one',
description: 'something...'
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.