React Router:将所有路由作为数组

Ala*_*uza 13 javascript reactjs react-router

是否存在将路由实例减少到路径数组的现有库?

示例:

    <Route path="/" component={App}>
      <Route path="author" component={Author}>
        <Route path="about" component={About}/>
      </Route>
      <Route path="users" component={Users} />
    </Route>
Run Code Online (Sandbox Code Playgroud)

产量

['/', '/author', '/author/about', '/users']
Run Code Online (Sandbox Code Playgroud)

我可以编写一个reduce函数,它只有很少的代码行并解决了这个问题,但我想知道是否有一个现有的库可以为我做这件事,并负责使用反应路由器表示路由的不同方法.

Ala*_*uza 12

由于我没有找到任何东西,我最终为此创建了一个库......

https://github.com/alansouzati/react-router-to-array

import React from 'react';
import { Route, IndexRoute } from 'react-router';
import reactRouterToArray from 'react-router-to-array';
// or var reactRouterToArray = require('react-router-to-array');

console.log(reactRouterToArray(
  <Route path="/" component={FakeComponent}>
    {/* just to test comments */}
    <IndexRoute component={FakeComponent} />
    <Route path="about" component={FakeComponent}>
      <Route path="home" component={FakeComponent} />
      <Route path="/home/:userId" component={FakeComponent} />
    </Route>
    <Route path="users" component={FakeComponent} />
    <Route path="*" component={FakeComponent} />
  </Route>)
); //outputs: ['/', '/about', '/about/home', '/users']
Run Code Online (Sandbox Code Playgroud)

  • 您的示例内联了路线。但在现实世界的应用程序中,我的路线位于类组件内的开关内(事实上:`&lt;React.Fragment&gt; -&gt; &lt;ScrollToTop&gt; -&gt; &lt;Switch&gt;`。我如何从那里获取它? (4认同)

U r*_*u s 5

我不明白你为什么需要一个图书馆。你Routes应该Array在道具中可用。

一个例子:

在此处输入图片说明

  • 从您的打印屏幕我可以看到您使用的是普通路由(作为 JSON 对象)。另一种表示路由的可能方式是使用 JSX,它本身具有不同的结构,例如:childRoutes 表示为 props.children。另一个限制是我需要一个单级字符串数组,而这个结构仍然是嵌套的。 (5认同)