reactrouter 有没有办法实现动态路由?

想实现先请求接口然后再生成路由改如何做到?(下面代码试了几次都不行)

import { useState, useEffect } from 'react'
import reactLogo from './assets/react.svg'
import viteLogo from '/vite.svg'
import './App.css'
import { Button } from 'antd-mobile'
import axios from 'axios'
import {
    createBrowserRouter,
    RouterProvider,
} from "react-router-dom";
import {Router as RemixRouter} from "@remix-run/router/dist/router";

 function test_request() {
    return axios.get('http://localhost:8888/api/')
        .then(function (response) {
            return response.data.Response
        })
}
interface Route { path: string, element?: string }

function App() {
  const [route, setRoute] = useState<RemixRouter>()
    // createBrowserRouter
    const router = test_request().then((data) => {
        // let c = data.map((v : Route) => {
        //     return { path: v.path, element: <div>2222222222222</div> }
        // })
        // setRoute(createBrowserRouter(c))
        return createBrowserRouter(data)
    })

    // useEffect(() => {
    //     test_request().then((data) => {
    //         let c = data.map((v : Route) => {
    //             return { path: v.path, element: <div>2222222222222</div> }
    //         })
    //         // setRoute(createBrowserRouter(c))
    //         return c
    //     })
    //
    //
    // },[])

  return (
    <div className="App">
      <div>
          <img src={viteLogo} className="logo" alt="Vite logo" />
      </div>
        <RouterProvider router={router} />
    </div>
  )
}

export default App
阅读 2.3k
1 个回答
import { useState, useEffect } from 'react';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
import axios from 'axios';

function App() {
  const [routes, setRoutes] = useState([]);

  useEffect(() => {
    axios.get('http://localhost:8888/api/')
      .then(response => {
        const routes = response.data.Response.map(route => ({
          path: route.path,
          component: () => <div>{route.element}</div>,
        }));
        setRoutes(routes);
      });
  }, []);

  return (
    <Router>
      <Switch>
        {routes.map((route, index) => (
          <Route key={index} path={route.path} component={route.component} />
        ))}
      </Switch>
    </Router>
  );
}

export default App;
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题