我的产品传递ID到我的页面有问题,我尝试eveything并搜索答案,但它仍然无效。
这是我的index.js:
import React from "react";
import {render} from "react-dom";
import {Router, Route, IndexRoute, hashHistory} from "react-router";
import {Menu} from './components/Menu';
import {MainPage} from './components/MainPage';
import {DetailsProduct} from './components/DetailsProduct';
class App extends React.Component{
render(){
return(
<Router history={hashHistory}>
{/* <IndexRoute component={Menu}></IndexRoute> */}
<Route path="/" component={()=>(<div><Menu/><MainPage/></div>)}></Route>
<Route path={"product/:id"} component={()=>(<div><Menu/><DetailsProduct>asd</DetailsProduct></div>)}></Route>
</Router>
)
}
}
render(<App/>, window.document.getElementById("app"));
和DetalisProduct (第http://localhost:8080/#/product/1页)
import React from "react";
export class DetailsProduct extends React.Component{
render(){
console.log(this.props.params); <-- this is undefined
return(
<h1>Product</h1>
)
}
}
答案 0 :(得分:5)
替换这个:
<Route path={"product/:id"} component={()=>(<div><Menu/><DetailsProduct>asd</DetailsProduct></div>)}></Route>
with:
<Route path={"product/:id"} component={DetailsProduct}></Route>
答案 1 :(得分:3)
答案 2 :(得分:1)
我假设您没有使用react-router v4
,而是v2.x.x
或v3.x.x
。在这种情况下,您应该重新构建路线,并且可以使用components
道具作为
<Router history={hashHistory}>
<Route path="/" component={Layout}>
<IndexRoute components={{menu: Menu, mainPage: MainPage}}/>
<Route path={"product/:id"} component={{menu: Menu, detail: DetailsProduct}}/>
</Route>
</Router>
在菜单组件中
使用react-router v4
,您希望它的工作方式也相对容易。在这种情况下,您可以使用prop渲染来提供组件,您可以使用它执行以下操作
import {HashRouter as Router, Route} from 'react-router-dom';
...
<Router>
<Route path="/" render={()=>(<div><Menu/><MainPage/></div>)}></Route>
<Route path={"product/:id"} render={()=>(<div><Menu/><DetailsProduct>asd</DetailsProduct></div>)}></Route>
</Router>
答案 3 :(得分:1)
对我来说,我使用的是render
方法,发现渲染组件中的this.props.match
是undefined
。这是我的解决方案,您必须输入props
。
this.props.match
将是undefined
:
<Route path='/users/:id' render={() => <UserDetail/>}/>
执行此操作:
<Route path='/users/:id' render={(props) => <UserDetail {...props}/>}/>
https://reacttraining.com/react-router/web/api/Route/render-func
答案 4 :(得分:0)
我用
import { Router, Route, browserHistory, IndexRoute} from 'react-router'
和
import {syncHistoryWithStore, routerReducer} from 'react-router-redux'
然后我可以通过this.props.params.id
答案 5 :(得分:0)
当我有这个代码时我遇到了同样的问题
<Route
path={"/:url"}
render={(routerProps) =>
<BusinessApps
{...routerProps}
{...this.props}
size={size}
/>
}/>
我删除了 {...this.props} 来解决这个问题。