ReactJS 中的动态路由究竟是什么

IT技术 reactjs routing react-router
2021-05-02 02:26:56

我一直在互联网上讨论 React 的动态路由。但是我找不到任何可以解释它是如何工作的以及它在各个方面与静态路由有何不同之处。

当我们想使用 React-Route 在同一页面中渲染某些内容时,我非常理解它是如何进行的。

我的问题是当想要呈现一个全新的页面时它是如何工作的?因为在这种情况下,该页面内的所有 DOM 都必须重新渲染。那么它会是静态路由吗?或者在某些方面仍然是动态的?

我希望我已经清楚了。感谢您提前回答,我很感激!

2个回答

我不认为上面的解释对于静态路由动态路由是正确的。在网络上也没有太多解释,但是在React Router Docs 中有一个很好的解释来自文档

如果您使用过 Rails、Express、Ember、Angular 等,那么您使用过静态路由。在这些框架中,您在进行任何渲染之前将路由声明为应用程序初始化的一部分。React Router pre-v4 也是静态的(主要是)。我们来看看express中如何配置路由:

在静态路由中,路由在渲染之前被声明并导入到顶层

而在动态路由中

当我们说动态路由时,我们指的是在您的应用程序呈现时发生的路由,而不是在正在运行的应用程序之外的配置或约定中。

所以在动态路由中,路由发生在 App 渲染时上述答案中解释的示例均适用于静态路由。

对于动态路由,它更像是

const App = () => (
    <BrowserRouter>
        {/* here's a div */}
        <div>
        {/* here's a Route */}
        <Route path="/tacos" component={Tacos}/>
        </div>
    </BrowserRouter>
)

// when the url matches `/tacos` this component renders
const Tacos  = ({ match }) => (
    // here's a nested div
    <div>
        {/* here's a nested Route,
            match.url helps us make a relative path */}
        <Route
        path={match.url + '/carnitas'}
        component={Carnitas}
        />
    </div>
)

首先,在应用程序部件只有一个路径被声明/tacos。当用户导航到/tacos玉米饼部件安装并且存在的下一个路由被定义/carnitas当用户导航到。所以/tacos/carnitas,在猪肉丝部件安装等。

所以这里的路由是动态初始化的。

使用 react-router 和 react-router-dom,并写如下:

onSubmit((e) => {
e.preventDefault();
this.props.history.push('<url>')
}

所以在任何地方你都可以运行这条线并有条件地去其他地方