当前位置: 首页 > 知识库问答 >
问题:

react.js - reactrouter 有没有办法实现动态路由?

吴高洁
2023-05-18

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

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

共有1个答案

公良渝
2023-05-18
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;
 类似资料:
  • 问题内容: 首先,我阅读了埃里克森对“为什么不能在Java接口中定义静态方法?”的有用答复。。这个问题不是关于“为什么”的问题,而是关于“然后如何做”的问题。 编辑:我的原始示例不适当地,但我将其保留在下面。 虽然我现在确信在大多数情况下我想做的是过度矫kill过正,但在一种情况下可能需要这样做: 我再举一个例子。现在,让我们采用一个适合于查找表的复杂功能,例如Bessel函数。这必须进行初始化,

  • 我们想为房间数据库构建一个过滤器,过滤器选项由用户选择。 i、 e.我们有一个带有字段(id、名称、日期、类型)的实体。用户可以按日期和/或名称过滤列表,其中包含文本和/或类型等于某个值 有办法在房间里做吗?

  • 我有现有的EC2实例在AWS上运行。它是手动创建的。 有没有办法将现有实例移动到云形成堆栈中,并通过云形成对其进行更新?或者应该删除现有实例,并通过云形成创建新实例? 当我从模板创建新实例时。它在AWS上创建新实例。

  • 问题内容: 假设我有一个使用lambda表达式(闭包)定义的对象列表。有没有一种方法可以检查它们以便进行比较? 我最感兴趣的代码是 完整的代码是 似乎唯一的解决方案是将每个lambda定义为一个字段,并且仅使用这些字段。如果要打印出称为的方法,最好使用。lambda表达式有更好的方法吗? 此外,是否可以打印lambda并获得人类可读的内容?如果你打印而不是 得到类似的东西 甚至使用和方法。 问题答

  • 问题内容: 我想知道是否有可能以编程方式发现特定API的所有端点。 因此,例如,如果我使用浏览器或curl获取此URL:https : //api.twitter.com/1.1/ 我可能会收到类似以下内容的JSON响应: 当然,Twitter可以选择发布还是不发布这种格式。因此,作为一个附带问题,是否有任何Java或Java库可以自动映射和发布您在控制器中创建的API路由? 问题答案: 由于没有

  • 有没有办法只在满足条件时才在Javafx中“渲染”组件?我有兴趣做一个具有不同角色的用户界面,如果角色允许,只需添加一个组件,我也想继续使用FXML。我没有读过类似的东西。