javascript - 如何将组件从数组传递到路由react-router-dom( typescript )

标签 javascript reactjs typescript react-router jsx

我尝试过这样的方法,以前确实有效。但现在,当我尝试新项目时,它不起作用。错误是“JSX 元素类型‘Element’没有任何构造或调用签名。”

应用程序.tsx:

import { BrowserRouter, HashRouter, Route, Routes, Navigate } from 'react-router-dom';
import { routes } from './Routes/routes';

function App() {

  return (
      <BrowserRouter>
            <Routes>
              {
                routes.map(({ path, element: Element }) =>
                  <Route key={path} path={path} element={<Element />}></Route>
                )
              }
              <Route path="*" element={<Navigate replace to="/cards" />} />
            </Routes>
      </BrowserRouter>
  );
}

export default App;

路由数组类型:

import React, { FC } from 'react';

export interface IRoute {
  path: string,
  element?: FC
}

路由数组:

import CardList from "../components/pages/CardList";
import { IRoute } from "../models/IRoute";


export const routes: IRoute[] = [
  { path: '/cards', element: CardList },
];

enter image description here

如果使用RouteObject类型会出错 error if used RouteObject type

最佳答案

由于您主要遵守react-router-domRoute组件API,我建议导入react -router-domRouteObject输入而不是重新声明您自己的。这可确保正确输入。

import { RouteObject } from 'react-router-dom';
import CardList from "../components/pages/CardList";

export const routes: RouteObject[] = [
  { path: "/cards", element: <CardList /> },
];
import { BrowserRouter, Route, Routes, Navigate } from 'react-router-dom';
import { routes } from './Routes/routes';

function App() {
  return (
    <BrowserRouter>
      <Routes>
        {routes.map(({ path, element }) =>
          <Route key={path} path={path} element={element} />
        )}
        <Route path="*" element={<Navigate replace to="/cards" />} />
      </Routes>
    </BrowserRouter>
  );
}

export default App;

Edit how-to-pass-components-from-array-to-route-react-router-dom-typescript

如果将所有路由(即“catch-all”路由)移动到路由配置并使用 useRoutes ,您也可以简化渲染。钩。它处理所有路线“映射”和渲染。

示例:

import { RouteObject } from 'react-router-dom';
import CardList from "../components/pages/CardList";

export const routes: RouteObject[] = [
  { path: "/cards", element: <CardList /> },
  ....
  { path: "*", element: <Navigate replace to="/cards" /> },
];
import { BrowserRouter, useRoutes } from 'react-router-dom';
import { routes } from './Routes/routes';

function App() {
  const appRoutes = useRoutes(routes);
  return (
    <BrowserRouter>
      {appRoutes}
    </BrowserRouter>
  );
}

export default App;

Edit how-to-pass-components-from-array-to-route-react-router-dom-typescript (forked)

这里的要点是,您不应该重新发明 RRD 提供的“轮子”。

关于javascript - 如何将组件从数组传递到路由react-router-dom( typescript ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75800522/

相关文章:

javascript - Branch.io 无法使用带有长链接的自定义fallback_url

javascript - 强制从同一 URL 重新下载 img

javascript - 控制异步循环

javascript - React InstantSearch RefinementList transformItems 不工作

reactjs - 在 React 路由器中使用 Link 标签中的状态传递数据

typescript - tsconfig.json 在 yarn 启动 React 应用程序后被重置

javascript - Typescript 中的可选链接运算符

javascript - 如何从 fetch :success event? 中获取这个集合

javascript - TypeScript 中的 useParams 不允许解构

typescript - 如何输入 Redux-Toolkit createListenerMiddleware 监听器条目