将子路由嵌套在另一个子路由中
Nesting child routes within another child route
>编辑
我的初始问题包括具有拆分点的路由,但我已将其简化为最简单的用例,即仅将子路由嵌套在彼此之下。
作为参考,我正在使用流行的 react-redux-starter-kit,我正在尝试将一个简单的包装器组件添加到我的路由中,如下所示:
export const createRoutes = (store) => ({
path: '/',
component: CoreLayout,
indexRoute: Home,
childRoutes: [{
component: TransitionWrapper,
childRoutes: [
CounterRoute(store)
]
}]
})
但是我收到以下错误,并且我的子路由未呈现:
Warning: Failed prop type: Required prop `children` was not specified in `CoreLayout`.
in CoreLayout (created by RouterContext)
in RouterContext (created by Router)
in Router (created by AppContainer)
in div (created by AppContainer)
in Provider (created by AppContainer)
in AppContainer
所以基本上,如果我在子路线中嵌套子路由,我会收到关于丢失孩子的投诉。
以下是完整设置:
主.js
const MOUNT_NODE = document.getElementById('root')
let render = () => {
const routes = require('./routes/index').default(store)
ReactDOM.render(
<AppContainer
store={store}
history={history}
routes={routes}
/>,
MOUNT_NODE
)
}
/routes/index.js
import CoreLayout from '../layouts/CoreLayout/CoreLayout'
import Home from './Home'
import NestedChild from './NestedChild'
import TransitionWrapper from './TransitionWrapper'
export const createRoutes = (store) => ({
path: '/',
component: CoreLayout,
indexRoute: Home,
childRoutes: [{
component: TransitionWrapper,
childRoutes: [
NestedChild
]
}]
})
应用容器.js
class AppContainer extends Component {
static propTypes = {
history: PropTypes.object.isRequired,
routes: PropTypes.object.isRequired,
store: PropTypes.object.isRequired
}
render () {
const { history, routes, store } = this.props
return (
<Provider store={store}>
<div style={{ height: '100%' }}>
<Router history={history} children={routes} />
</div>
</Provider>
)
}
}
export default AppContainer
核心布局.js
import React from 'react'
import Header from '../../components/Header'
import classes from './CoreLayout.scss'
import '../../styles/core.scss'
export const CoreLayout = ({ children }) => (
<div className='container text-center'>
<Header />
<div className={classes.mainContainer}>
{children}
</div>
</div>
)
CoreLayout.propTypes = {
children: React.PropTypes.element.isRequired
}
export default CoreLayout
TransitionWrappper.js <--- 未呈现
const TransitionWrapper = (props) => (
<div className="im-not-working">
{this.props.children}
</div>
)
export default TransitionWrapper
嵌套子.js <---未呈现
你有没有试过从CoreLayout
的children
道具中删除isRequired
?
如果要动态加载子组件,则在放置子组件之前,CoreLayout
会呈现一段时间。
相关文章:
- Hapi-js重定向到另一个带有额外请求数据的路由
- 如何在Ember中转换到另一个路由时调用一个方法
- 来自另一个模块的 Angularjs 路由控制器
- 从外部web服务获取图像并将其传递到另一个express js路由
- ui路由器——具有一条路由'的URL与另一个具有$stateParams的状态共享同一级别
- HTML5验证在backbone.js onclick路由到另一个视图中不起作用
- 如何为路由实现另一个var参数名称
- Ember路由从一个嵌套对象转换到另一个
- 在重定向到另一个页面/路由之前进行确认
- Angular 2-是否可以将我的路由存储在另一个文件中,并将它们导入到app.ts文件中(因为随着时间的推移,路由会不
- 从另一个路由调用一个hapi路由
- 在异步还原操作成功时转换到另一个路由
- 为什么AngularJS的服务在从一个路由导航到另一个路由时没有定义?
- 我如何发送文本从一个路由(/client/1)到另一个路由(/client/2)使用ajax在rails
- Express node.js从node路由向另一个服务器发出get请求
- 提交时路由到另一个页面
- 当' mapHooks '失败时重定向到另一个路由
- AngularJS访问路由解析结果在另一个解析中
- 在路由时,使用angular JS中的Services或Factory将JSON数据从控制器传递到另一个控制器
- 在ember.js的控制器中使用另一个路由模型