什么是路由?为什么"路由"单页网页应用程序需要什么?

时间:2016-09-22 10:19:27

标签: url-routing react-router

Super newbee问题:我正在网上搜索,因为我想了解网络应用中路由的概念。到目前为止互联网让我更加困惑。

到目前为止,我了解路由库有助于解析URL并将应用程序置于状态机的相应状态。

路由还有更多吗?

为什么首先需要路由?

为什么网址很重要?例如,在桌面应用中,没有网址,那么在网络应用中它们的重要性是什么?

编辑:感谢您的回答,当我的网络应用程序意味着,我想要的是单页网络应用程序,当我的意思是路由时,我的意思就像为https://github.com/ReactTraining/react-router这样的SPA路由。

6 个答案:

答案 0 :(得分:5)

我也有这个问题:“为什么我们需要路由?”。你可以编写没有路由的应用程序。代码可能会变得混乱,但仍然不是不可能的。

我选择路由的最大原因是因为如果用户点击浏览器的后退按钮(也就是前进按钮),他将不会在应用程序中导航。用户可能希望使用之前加载的不同“页面”的历史记录在应用程序内导航。相反,他将被抛弃在网络应用程序之外。点击“刷新”按钮也会将他扔到应用程序的根目录。

从用户的角度来看,它是一个常规的网络应用程序(他不需要知道它是如何设计的:SPA或其他),它应该可以在任何网络应用程序/网站工作时工作。路由确保了这一点,不是吗?

答案 1 :(得分:4)

在桌面应用程序中,您可以使用按钮和其他控件来获得所需内容。因此,UI应用程序中的路由将是所有UI控件的集合。 另一方面,在Web应用程序中,通过一些文本(链接和参数)访问所有功能。

URL是访问功能的路径。路由就像根据提供的URL和params来决定调用哪个功能的机制。

所以基本上路由是URL和Web服务器功能之间的映射。

答案 2 :(得分:3)

这是一个很好的问题,我认为讨论的频率不高。简短的答案是,在单页Web应用程序中,通常不需要路由。如果您要构建的应用程序不需要Google为其页面编制索引,或者您不在乎或不希望用户能够为页面添加书签,则没有理由实施路由。 在SPA中,路由增加了额外的复杂性和工作量,因此,如果您避免这样做,则应该这样做。当然,诸如Angular和React之类的现代框架提供了使路由更加容易的工具,但是即使那样,路由也很难做到,例如在页面之间进行动画处理。 Web应用程序的一个很好的例子是路由将是多余的,它是一个多页表单,您想控制用户的通过并可能阻止他们返回不适用的页面。 实施这样的带有路线的表格将是一场噩梦,因为您必须阻止用户访问其历史记录中的某些页面。

问问自己SPA中的实际路线是很有用的。很容易将其视为“网页”,但这实际上是一种状态,当您在路线之间导航时,您真正要做的就是在应用程序的不同状态之间导航。应用程序的外观可能在状态之间改变的事实与实际情况无关。因此,路由所要做的就是为用户提供一种返回到应用程序特定状态的方式。 仅当您希望用户能够返回到应用程序的状态时,才应在SPA中实现路由。 实现此目的的另一种方法,也许是更有用的方法是实现撤消和重做机制。

当然,即使您没有路线,您仍然必须关心当用户单击“历史记录后退”按钮时会发生什么,但是您仅会收到一个模态警报,警告他们即将离开应用程序他们应该继续进行导航吗?

答案 3 :(得分:2)

SPA中的路由用于加载Web应用程序的某些部分,例如select obj1.*,obj2.some_fields from table1 obj1 JOIN table2 obj2 on (obj1.id=split(obj2.id,'|')[0]) 将使用与用户标识对应的正确用户配置文件加载SPA的配置文件部分。这可以在GitHub example you provided

中看到
yourappurl.com/profile/userid/

SPA指的是一般情况下,您有一个index.html作为"主视图"然后根据路由,使用React或AngularJS等框架从index.html添加/删除某些部分。

答案 4 :(得分:0)

我不时有同样的问题。

我想说SPA中的路由器是一个组件层次结构助手。

正如@ tech4242指出的那样,我们在iOS中没有像segue这样的东西。那么,如果我们不使用路由器,我们应该如何使用它来帮助用户导航?我们在这里谈论SPA。所以我们可以在商店或州内管理这个。是的,这是可行但不可取的。

尝试从使用面向组件的库(React或Vue)的角度来考虑这一点。使用路由器帮助我们将特定组件用于特定路由。当用户在不同路线之间来回移动时,我们依靠路线来告知要显示的组件。我们简单地将一个组件与特定路由耦合,这使得我们的根组件(通常称为App)清晰,可维护和可读。没有路由器,根组件或状态将是混乱的,难以维护。

答案 5 :(得分:0)

我的理解是(如果我错了,请纠正我):

  • 当人们谈论“路由”时,它们通常意味着在默认路由之上进行额外的路由。

  • 对于基本操作,我们根本不需要额外的路由。通常有一个默认路由,默认路由就足够了。基本上,这意味着将几个参数转换为我们可以在服务器上调用的端点地址。

为什么我们需要这种额外的路由?

  • 仅当您需要在默认路由之上(或代替默认路由)进行“自定义”(且通常很复杂)路由时,才需要它。