无法在React Router v5上打印嵌套路由的子组件

维诺德·巴夫纳尼(Vinod Bhavnani)

我似乎无法弄清楚如何在React Router v5中打印子路由。这是我设置应用程序的方式。

1)index.jsx

ReactDOM.render(
<Provider store={store}>
  <IntlProvider defaultLocale="en" locale="en" messages={messages}>
    <ThemeProvider theme={theme}>
      {Routes()}
    </ThemeProvider>
  </IntlProvider>
</Provider>,
root,

);

2)Routes.jsx

export default function Routes() {
  return (
    <ConnectedRouter history={history}>
      <Switch>
        <Route path="/welcome" component={App} />
        <Route component={UnknownPage} />
      </Switch>
   </ConnectedRouter>
  );
}

3)App.jsx

const App = ({ location }) => (
  <div>
    <DialogMount />
    <RefreshSession />
    <Masthead />
    <Navigation />
    <PageWrapper>
      <NavTabs location={location} />
      <ContentWrapper>
        <Alert />
        <Switch>
          {generateRoutes(routesConfig)}
        </Switch>
      </ContentWrapper>
    </PageWrapper>
  </div>
);

4)generateRoutes方法

export const generateRoutes = (routes = []) => Object.values(routes).map((route) => {
  if (route.redirect) {
    return [];
  } else if (route.children) {
    return (
      <Route key={route.path} path={route.path}>
        <Switch>
          {generateRoutes(route.children)}
        </Switch>
      </Route>
    );
  }
  return <Route key={route.path} path={route.path} component={route.component} />;
}).reduce((navigation, route) => navigation.concat(route), []);

5)routesConfig

const routesConfig = {
  parent: {
    path: 'parent',
    name: 'parent',
    children: {
      child1: {
        path: 'child1',
        name: 'child1',
        component: Child1,
      },
    },
  },
};

问题是,从我的App.jsx开始,所有东西都被渲染到NavTabs为止。只是它的路由部分没有被渲染。我知道我在这里错过了一些非常愚蠢的东西,但是似乎无法弄清楚。

任何帮助表示赞赏。

在Shubham回答后编辑:

我进行了更改,但仍然面临相同的问题。但是代替

render={props => <route.component {...props} />}

我用了

children={props => <route.component {...props} />}

这似乎正在加载组件,但是现在我看到这样的错误:

Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.

Check the render method of `Licensing`.
    at createFiberFromTypeAndProps (react-dom.development.js:23965)
    at createFiberFromElement (react-dom.development.js:23988)
    at createChild (react-dom.development.js:13628)
    at reconcileChildrenArray (react-dom.development.js:13900)
    at reconcileChildFibers (react-dom.development.js:14305)
    at reconcileChildren (react-dom.development.js:16762)
    at updateHostComponent (react-dom.development.js:17302)
    at beginWork (react-dom.development.js:18627)
    at HTMLUnknownElement.callCallback (react-dom.development.js:188)
    at Object.invokeGuardedCallbackDev (react-dom.development.js:237)
Shubham Khatri

之所以发生此问题,是因为除非您在呈现的组件本身中指定嵌套路由,否则您需要为其提供完整的路径名。

解决方案是在路径名之前传递前缀以追加。我们也需要尾随/

const generateRoutes = (routes = [], prefix = "") =>
  Object.values(routes)
    .map(route => {
      console.log(prefix);
      if (route.redirect) {
        return [];
      } else if (route.children) {
        return (
          <Route key={route.path} path={`${prefix}/${route.path}`}>
            <Switch>
              {generateRoutes(route.children, prefix + "/" + route.path)}
            </Switch>
          </Route>
        );
      }
      return (
        <Route
          path={`${prefix}/${route.path}`}
          key={route.path}
          render={props => <route.component {...props} />}
        />
      );
    })
    .reduce((navigation, route) => navigation.concat(route), []);

工作演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

react-router v5 –嵌套路由

来自分类Dev

React Router V5:在动态路由中需要嵌套路由

来自分类Dev

React Router V5:在动态路由中需要嵌套路由

来自分类Dev

无法使用React Router获得嵌套路由以进行匹配

来自分类Dev

React Router-无法渲染嵌套路由

来自分类Dev

React Router v4 - 嵌套路由问题

来自分类Dev

react-router中的嵌套路由

来自分类Dev

React Router,在参数后嵌套路由

来自分类Dev

React Router,在参数后嵌套路由

来自分类Dev

react-router-创建没有组件嵌套的嵌套路由

来自分类Dev

React-Router:嵌套路由而不嵌套带有通配符路径的组件

来自分类Dev

React-Router:嵌套路由而不嵌套带有通配符路径的组件

来自分类Dev

react-router 路由 <Link> v5

来自分类Dev

react-router:无法在其他视图中显示嵌套路由

来自分类Dev

使用React Router v4的嵌套路由-解决方案

来自分类Dev

在 react-router v4 中看到嵌套路由中的空白页

来自分类Dev

ui-router中的嵌套路由无法解析

来自分类Dev

React-Router忽略服务器上的嵌套路由

来自分类Dev

react-router 2.0无法路由

来自分类Dev

路由无法使用React-Router加载

来自分类Dev

无法使用React Router渲染组件

来自分类Dev

React-Router无法加载嵌套页面

来自分类Dev

react-router-relay中的嵌套路由

来自分类Dev

在React-Router中找不到嵌套路由的字体

来自分类Dev

React Router 6 alpha 4嵌套路由

来自分类Dev

React Router Dom嵌套路由,或者如何传递

来自分类Dev

嵌套路由不适用于react-router

来自分类Dev

react-router-relay中的嵌套路由

来自分类Dev

React-Router嵌套路由不起作用