在React路由Dom v5上,我有一个可以使用嵌套元素的工作代码.V5代码为:

const App = () => {
  return (
    <Router>
      <Switch>
        <Route exact path="/" />
        {user && (
          <>
            <Route path="/movies">
              <Home type="movie" />
            </Route>
            <Route path="/series">
              <Home type="series" />
            </Route>
          </>
        )}
      </Switch>
    </Router>
  );
};

...现在,当我try 移动到V6版本时,我无法访问嵌套页面的内容.这两个嵌套的路由显示基于"type"属性的内容,但在v6中我根本没有得到任何内容.我看到的只是主页.当我试图在导航栏中导航时,只有链接在更改,但我无法访问type元素的内容.

我当前的v6代码:

应用程序.JSX公司:

const App = () => {
  return (
    <Router>
      <Routes>
        <Route path="/" element={<Home />} >
          <Route path="/movies" element={<Home type='movies'/>} />
          <Route path="/series" element={<Home type='series'/>} />
        </Route>
      </Routes>
    </Router>
  );
};

成年男子jsx公司:

const Home = ({type}) => {
      return (
        <div className='home'>
            <Navbar />
            <Featured type={type} />
            <List />
            <List />
            <List />
            <List />
            <Outlet />
        </div>
      )
    }

请有人帮助我了解我做错了什么,以及为什么react router不加载组件的内容?

推荐答案

据我所知,RRDv6代码并不是一个精确的转换.v6版本递归地呈现Home组件.嵌套管线也不应使用绝对路径.

建议

  1. Home中删除Home组件和Outlet,然后只渲染两条嵌套管线.如果目的是渲染没有任何类型的Home组件,则使用索引路由.

    const Home = ({ type }) => {
      return (
        <div className='home'>
          <Navbar />
          <Featured type={type} />
          <List />
          <List />
          <List />
          <List />
        </div>
      );
    };
    

    ...

    <Route path="/">
      <Route index element={<Home />} />
      <Route path="movies" element={<Home type='movies' />} />
      <Route path="series" element={<Home type='series' />} />
    </Route>
    
  2. 展平所有路由并从Home中删除Outlet,这与上面的基本相同,但现在使用绝对路径.

    const Home = ({ type }) => {
      return (
        <div className='home'>
          <Navbar />
          <Featured type={type} />
          <List />
          <List />
          <List />
          <List />
        </div>
      );
    };
    

    ...

    <Route path="/" element={<Home />} />
    <Route path="/movies" element={<Home type='movies' />} />
    <Route path="/series" element={<Home type='series' />} />
    
  3. 定义一条路由,并利用这path条路由发挥优势.换言之,声明type是路由路径参数的路径,并从Home组件中的参数判断type.

    const Home = () => {
      const { type } = useParams();
      return (
        <div className='home'>
          <Navbar />
          <Featured type={type} />
          <List />
          <List />
          <List />
          <List />
        </div>
      );
    };
    

    ...

    <Route path="/" element={<Home />} />
    <Route path="/:type" element={<Home />} />
    

Reactjs相关问答推荐

webpack 5中动态导入的路径

以下代码是否存在安全问题?

如何处理具有REACTION-REDUX状态的Nextjs路由警卫

Reaction Ploly:如何在多个子情节中共享zoom 状态

我如何在不被 destruct 的情况下将导航栏固定在顶部?

ReactJS:唯一项目的数量总和

使用 MUI 菜单时添加新 html 元素时布局意外滚动跳转

验证 Yup 中的对象项

为 Next.js 应用程序目录中的所有页面添加逻辑的全局文件是什么?

如何将 npm 包添加到我的 Vite + React 应用程序中?

React-dom 的钩子调用无效.我能做些什么?

React Wordpress Apache 在索引之外重新加载 -> 未找到页面

计数器递增 2 而不是 1

Formik onChange() 字段挂钩覆盖显示值和 Select 机制

如何处理页面加载时发生的 reactjs 错误?

如何在 React 中使用 debounce hooks

更新和删除功能不工作 Asp.net MVC React

从一个获取 axios 请求(ReactJS)中删除默认参数

在嵌套的 Stack Navigator 中的 BottomTabBar 中导航会导致比以前更多的渲染

你如何使用 refs 访问 React 中映射子项的值?