@AndreyVolkov72

Как отрисовать Route в React + TypeScript с помощью map?

Такая проблема, хочу отрисовать на основе routesArray в index.ts файле, роуты в компоненте AppRouter.tsx.
Но как понимаю ts не понимает, что страницы которые я импортирую это функциональные компоненты. Но когда меняю расширение index с ts на tsx, ошибка пропадает, но роуты не рендерятся.
При этом пробовал в routesArray component: убирать символы < />, но рендеринг всё равно не происходит, т.к. в router dom v6+ element должен быть с "кавычками < />". При этом так же менял у index расширение с ts на tsx и в любом случае не рендериться.

Примичание, index.ts файл, это не главный index файл, при помощи которого работает приложение

Index.ts
import React from "react";
import { About } from "../pages/About";
import { Portfolio } from "../pages/Portfolio";
import { Skills } from "../pages/Skills";

interface IRoutes {
    path: string;
    component: React.ComponentType | any;
}

export enum RoutesNames {
    ABOUT = '/',
    PORTFOLIO = '/portfolio',
    SKILLS = '/skills',
}

export const routesArray:IRoutes[] = [
    {path: RoutesNames.ABOUT, component: <About/>},
    {path: RoutesNames.PORTFOLIO, component: <Portfolio/>},
    {path: RoutesNames.SKILLS, component: <Skills/>},
]


AppRouter.tsx
import React from 'react'
import { Route, Routes } from 'react-router-dom'
import { routesArray } from '../routes'

export const AppRouter = () => {
  return (
    <Routes>
        {routesArray.map(item=><Route key={item.path} element={item.component} />)}
    </Routes>
  )
}

App.tsx файл, куда импортируется AppRouter
import React from 'react';
import { AppRouter } from './components/AppRouter';

function App() {
  return (
    <div className="App">
      <p>title</p>
      <AppRouter/>
    </div>
  );
}

export default App;
  • Вопрос задан
  • 441 просмотр
Решения вопроса 1
@AndreyVolkov72 Автор вопроса
Решилось как всегда, был невнимателен и пропустил что при цикле рендера забыл указать путь
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы