基本上,我想做的是创建一个包含我的所有React项目并展示其反应项目的React投资组合项目。但是我不知道如何根据url值呈现项目。
我的意思是,
<Route path='/projects/:projectName' component={Project}></Route>
我想基于:projectName
vakue渲染组件。
或者也许创建一个Project
组件,该组件仅根据url值呈现给定的项目。
那有可能吗?我知道我可以使用match
来获取:projectName
值,但是如何使用它来渲染组件?
答案 0 :(得分:1)
方法很少
1.如上所述,让项目组件根据match.params
const routes = {
'my-route1': <MyComponent1 />,
'my-route2': <MyComponent2 />
}
const Project = props => {
const { projectName } = props.match.params
return routes[projectName] || <DefaultComponent />
}
const PrivateRoute = ({ component: Component, ...rest }) => {
const func = props => (!!rest.isUserAllowedToNavigate()
? <Component {...props} />
: (
<Redirect to={
{
pathname: '/login',
search: props.location.pathname !== '/' && queryStringComposer({
redirect_from: props.location.pathname || getQueryStringParam('redirect_from')
})
}
}
/>
)
)
return (<Route {...rest} render={func} />)
}
/* Connecting to redux */
const PrivateRouteConnected = connect(mapStateToProps, mapDispatchToProps)(PrivateRoute)
/* Using as normal routes */
<PrivateRouteConnected exact path="/dashboard" component={Dashboard} />
答案 1 :(得分:0)
您的Project
组件可以处理根据URL参数呈现不同组件的逻辑。例如:
const Project = props => {
const { projectName } = props.match.params
if (projectName === project1) {
return <ProjectOne addProps={addProps} />
}
if (projectName === project2) {
return <ProjectTwo />
}
return <DefaultProject />
}