我正在尝试通过路由器传递一个道具,并尝试了多个解决方案,所有这些解决方案都传递了一个空道具。
最初,我试图传递匹配对象以访问URL参数,但现在我决定传递任何东西。
使用 react-router-dom (我认为是路由器v4)。
另外,我正在SearchArtist.js
import ArtistDetails from './ArtistDetails'
import {
BrowserRouter,
Route,
Link
} from 'react-router-dom'
ArtistDetails.js
,在所有3次尝试中都保持不变 ArtistDetails.js
class ArtistDetailsComp extends React.Component {
constructor(props) {
super(props)
}
componentDidMount() {
console.log(this.props)
}
render() {
<div></div>
}
}
SearchArtist.js
<Link to='/artist'>
<Route path='/artist' render={(props) => (
<ArtistDetails something='hello' {...props} />
)} />
在ArtistDetails.js
中登录控制台会返回空道具
SearchArtist.js
<Link to={{ pathname: '/artist', state: { foo: 'bar'} }}>
{item.longTitle}
</Link>
<Route path='/artist' component={ArtistDetails}/>
在ArtistDetails.js
中登录控制台会返回空道具
SearchArtist.js
<Link to='/artist' params={{ something: 'hello' }}>
{item.longTitle}
</Link>
<Route path='/artist' component={ArtistDetails}/>
在ArtistDetails.js
中登录控制台会返回空道具
我没有收到任何错误,render()中的任何内容都可以正常工作,我只是无法将任何信息传递给我的班级。这是我的第一个React项目,我不知道我是否缺少基本知识。
我试图在一个更简单的项目中复制错误,但没有,发现这是我导出组件的方式。
我改变了
export default function ArtistDetails(){
return (
<ArtistDetailsComp />
)
}
公正
export default ArtistDetails
然后将类从ArtistDetailsComp
重命名为ArtistDetails``,并且有效。
export default function ArtistDetails(props){
return (
<ArtistDetailsComp props={props} />
)
}
这也行得通,原来我根本没有在出口中传递道具,所以当我打电话给道具时,显然什么都没有,希望以后能对其他人有所帮助。
答案 0 :(得分:0)
我希望这会有所帮助,
尝试编写render()
,
<Route path="/artist" render={() => <ArtistDetails newProps={this.props} />} />
尝试使用component
,
<Route path="/artist" component={() => <ArtistDetails newProps={this.props} />} />
将道具传递到React-Router路线,
<Route
path="/artist"
render={(routeProps) => (
<ArtistDetails {...routeProps} {...props} />
)}
/>
使用新的更新直接可行,
<Route path="/artist" render={(props) => <ArtistDetails {...props} />} />
class ArtistDetails extends React.Component {
render() {
return (
<React.Fragment>
{this.props}
</React.Fragment>
);
}
}