【问题标题】:Why React Component is rendering on same page instead of another?为什么 React Component 在同一个页面而不是另一个页面上呈现?
【发布时间】:2021-12-09 06:32:51
【问题描述】:

所以除了嵌套路由之外,所有组件在新页面上都可以正常渲染。 url 也发生了变化,但组件在上一页的所有组件之后呈现在同一页面上,而不是在自己的页面上呈现。 这是代码

App.js

function App() {
  return (
    <PlaylistState>
      <Router>
        <div className="App">
          <Navigation />
          <main className="content-container">
            <Switch>
              <Route exact path="/">
                <Home />
              </Route>
              <Route exact path="/favourites">
                <Favourites />
              </Route>
              <Route exact path="/playlistForm">
                <PlaylistForm />
              </Route>
              <Route path="/playlists">
                <Library />
              </Route>
            </Switch>
          </main>
        </div>
      </Router>
    </PlaylistState>
  );
}

export default App;

Library.js

const Library = () => {
  return (
    <div>
      <h1 className="my-2">Library</h1>
      <Playlists />
    </div>
  );
};

export default Library;

Playlists.js

const Playlists = () => {
  const PlaylistContext = useContext(playlistContext);
  const { playlists } = PlaylistContext;
  const { url, path } = useRouteMatch();

  // console.log(url);
  console.log("path", path);

  return (
    <section className="playlist-container">
      {playlists.map((playlist) => (
        <>
          <Link to={`${url}/${playlist.id}`}>
            <PlaylistCard key={playlist.id} cardDetails={playlist} />
          </Link>
        </>
      ))}

      <Route path={`${path}/:playlistId`}>
        <Playlist />
      </Route>
    </section>
  );
};

export default Playlists;

【问题讨论】:

    标签: reactjs react-hooks react-router components nested-routes


    【解决方案1】:

    这是嵌套路由的预期行为,它在父组件内呈现,请参阅this question

    如果您希望路由 "/playlists/:playlistId" 仅渲染 &lt;Playlist /&gt;,您应该在顶层拥有所有其他路由的兄弟。

    编辑:代码

        function App() {
          return (
            <PlaylistState>
              <Router>
                <div className="App">
                  <Navigation />
                  <main className="content-container">
                    <Switch>
                      ...
                      <Route path="/playlists/:id">
                        <Playlist />
                      </Route>
                      <Route path="/playlists">
                        <Library />
                      </Route>
                    </Switch>
                  </main>
                </div>
              </Router>
            </PlaylistState>
          );
        }
    

    导出默认应用;

    【讨论】:

    • 那么如何将播放列表组件渲染到新页面?任何想法
    • 只需将其作为另一条路由添加到&lt;Switch&gt; 中,并确保将该路由放在更通用的路由之前,即"/playlists"
    • 所以我的问题根本不是嵌套路由。但是感谢时间的伙伴
    猜你喜欢
    • 2010-10-13
    • 2019-07-06
    • 1970-01-01
    • 2011-09-20
    • 2021-08-18
    • 2021-08-26
    • 1970-01-01
    • 2015-05-08
    • 1970-01-01
    相关资源
    最近更新 更多