【问题标题】:Children are undefined when using <Route /> from react-router从 react-router 使用 <Route /> 时,子级未定义
【发布时间】:2020-01-23 16:22:51
【问题描述】:

仅供参考,我使用的是 react-router 3.0.0 版。

目前,我正在添加一个父路由组件,它充当包裹在子组件周围的页脚。虽然父组件将正确呈现,但我不断收到错误 Warning: Failed prop type: The prop `children` is undefined 并且没有子组件呈现。我的路线目前看起来像:

export default(store) => {
return [
<Route
  path=""
  component={Footer}
 >
   <Route
    path="main/intro"
    component={Intro}
   />
   <Route
     path="main/payments"
     component={Payments}
    />
</Route>,
  ]
}

而Footer父组件看起来像

export function Footer({ children }) {
  return (
    <div>
      {children}
      <div className={divStyle}>
        <OpenEmail />
      </div>
      <div className={divStyle}>
        <Menu />
      </div>
    </div>
  );
}

似乎不应该使用任何高于 v4 的 react-router 版本,嵌套,但我不知道为什么我在低于 v4 的版本中遇到此错误

【问题讨论】:

  • 路由有渲染方法

标签: javascript reactjs react-router


【解决方案1】:

看起来您正在使用 propTypes 为您的 Footer 组件上的 children 属性声明一个类型,但由于它是由您的 Route 的 component 属性呈现的,因此它没有接收任何内容并导致类型不匹配。您要么需要在没有孩子的情况下将 propType 更改为有效,要么使用 cmets 中建议的 render 方法,如下所示:

<Route
  path=""
  render={(props) => <Footer {...props}><div>I am a child</div></Footer>}
 >
   <Route
    path="main/intro"
    component={Intro}
   />
   <Route
     path="main/payments"
     component={Payments}
    />
</Route>

【讨论】:

  • 这是有道理的,尽管提到&lt;MyKids/&gt; 的地方到底是什么?我将道具更改为您提到的内容,但孩子们仍然未定义:/
  • 无论你想渲染为你调用{children}Footer组件的子元素
  • 这是否意味着将包装组件及其中的所有内容放入渲染方法中?我实际上还有许多其他子路线,但为了简单起见,我只放了两条。因为如果我把所有东西都放在那个渲染方法中,它会非常大。
  • 不一定,只有需要渲染子组件或应用特定道具或其他需要它的场景的组件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-31
  • 2021-08-11
  • 2020-09-03
  • 2020-03-03
  • 2016-09-06
  • 2019-12-30
  • 1970-01-01
相关资源
最近更新 更多