【发布时间】:2017-12-21 23:34:01
【问题描述】:
我在将id 传递到我的产品页面时遇到问题,我尝试了所有方法并搜索答案,但仍然无法正常工作。
这是我的 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"));
及详情产品 (页面: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>
)
}
}
我在 3 年后回到这里。解决方案:
以这种方式渲染组件并不是一个好的解决方案:
<Route path={"product/:id"} component={()=>(<div><Menu/><DetailsProduct>asd</DetailsProduct></div>)}></Route>
但是如果你想渲染一个这样的组件(我不推荐),你必须添加 props 作为函数的参数参数,然后对你想要的组件进行重组道具({...道具})
<Route path={"product/:id"} component={(props)=>(<div><Menu/><DetailsProduct>asd</DetailsProduct></div>)}></Route>
最好的解决方案是像这样渲染路由:
<Route path={"product/:id"} component={DetailsProduct}></Route>
在DetailsProduct 内部,您可以渲染<Menu /> 或使用Switch:
<Menu/>
<Switch>
<Route exact path={"product/:id"} component={DetailsProduct}/>
// Add any other routes you want here
</Switch>
【问题讨论】:
-
您希望在
this.props.params中看到什么? -
我没有看到你正在向
传递道具? -
它现在可以工作,但我必须通过两个组件“Menu 和 DetailsProduct”,你知道怎么做吗我能做到吗? -
在
中导入 组件怎么样?
标签: javascript reactjs react-router