React Router 4 Nested Routes not rendering

╄→гoц情女王★ 提交于 2019-11-26 11:36:42

问题


I\'m trying to do nested routing in one of my components.

Here\'s the parent component:

const App = () => (
  <BrowserRouter>
    <Provider store={store}>
      <Switch>
        <Route exact path=\"/\" component={Landing} />
        <Route path=\"/contribute\" component={Contribute} />
      </Switch>
    </Provider>
  </BrowserRouter>
);

And here\'s the child component:

const Landing = () => (
  <div>
    <SearchBar />
    <section className=\"results-sctn\">
      <Route exact path=\"/\" component={ArtistList} />
      <Route path=\"/test\" component={Test} />
    </section>
  </div>
);

ArtistList renders fine on the / route, but /test renders a totally blank page. Any idea why this might be?


回答1:


This behaviour happens because have an exact attribute mentioned on the parent route

<Route exact path="/" component={Landing} />

So what happens is that react-router sees a path /test to match and then tries to match it starting from the top level. and it sees two routes one is exactly / and other is /contribute. None of them match the required path and hence you see a blank page

You need to write

<Route path="/" component={Landing} />

So when you do this, it will see / which matches /test partially and then will try to find a matched route in the landing component which it will find.

Also change the order of the parent Route, since Switch renders the first match and / is a partial match for /test so /contribute wont work

Your final code would look like

const App = () => (
  <BrowserRouter>
    <Provider store={store}>
      <Switch>
        <Route path="/contribute" component={Contribute} />
        <Route path="/" component={Landing} />
      </Switch>
    </Provider>
  </BrowserRouter>
);


来源:https://stackoverflow.com/questions/47308065/react-router-4-nested-routes-not-rendering

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!