S. *_*enk 10 javascript reactjs react-router
编辑
我的初始问题包括具有分裂点的路线,但我已将其简化为仅在彼此之间嵌套子路线的最简单用例.
作为参考我正在使用流行的react-redux-starter-kit,我试图在我的路由中添加一个简单的包装器组件,如下所示:
export const createRoutes = (store) => ({
path: '/',
component: CoreLayout,
indexRoute: Home,
childRoutes: [{
component: TransitionWrapper,
childRoutes: [
CounterRoute(store)
]
}]
})
Run Code Online (Sandbox Code Playgroud)
但我得到以下错误,我的子路线没有呈现:
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
Run Code Online (Sandbox Code Playgroud)
所以基本上如果我在儿童路线上筑巢儿童路线,我会抱怨失踪儿童.
这是完整的设置:
main.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
)
}
Run Code Online (Sandbox Code Playgroud)
/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
]
}]
})
Run Code Online (Sandbox Code Playgroud)
AppContainer.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
Run Code Online (Sandbox Code Playgroud)
CoreLayout.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
Run Code Online (Sandbox Code Playgroud)
TransitionWrappper.js <---不是渲染
const TransitionWrapper = (props) => (
<div className="im-not-working">
{this.props.children}
</div>
)
export default TransitionWrapper
Run Code Online (Sandbox Code Playgroud)
NestedChild.js <--- IS NOT RENDERING
您是否尝试过从的支柱isRequired中删除?childrenCoreLayout
CoreLayout如果您动态加载子组件,则在将子组件放入其中之前,将需要一段时间进行渲染。
| 归档时间: |
|
| 查看次数: |
2073 次 |
| 最近记录: |