什么是路由?为什么单页 Web 应用程序需要 "routing"?
What is routing? Why is "routing" needed in single page web apps?
我了解到 https://github.com/ReactTraining/react-router 等 SPA 的路由库有助于解析 URL 并将应用置于状态机的相应状态。
路由还有比这更多的吗?
为什么首先需要路由?
为什么 URL 很重要?例如,在桌面应用程序中没有 URL,那么在网络应用程序中它们有什么大不了的?
在桌面应用程序中,您可以使用按钮和其他控件来获得所需内容。因此 UI 应用程序中的路由将是所有 UI 控件的集合。
另一方面,在网络应用程序中,所有功能都是通过一些文本(链接和参数)来访问的。
A URL 是访问功能的路径。路由类似于根据提供的 URL 和参数决定调用哪个功能的机制。
所以基本上路由是 URL 和网络服务器功能之间的映射。
SPA 中的路由用于加载 Web 应用程序的某些部分,例如yourappurl.com/profile/userid/
将使用与用户标识对应的正确用户配置文件加载 SPA 的配置文件部分。这可以在 GitHub example you provided:
中看到
<Router history={browserHistory}>
<Route path="/" component={App}>
<Route path="about" component={About}/>
<Route path="users" component={Users}>
<Route path="/user/:userId" component={User}/>
</Route>
<Route path="*" component={NoMatch}/>
</Route>
SPA 指的是这样一个事实,即通常您有一个 index.html 作为您的 "main view" 然后根据路由您 add/remove 来自 index.html 的某些部分与React 或 AngularJS 等框架
我也有这个问题:"Why do we need routing?"。您可以在完全没有路由的情况下编写应用程序。代码可能会变得混乱,但并非不可能。
我使用路由的最大原因是,如果用户点击浏览器的“后退”按钮(就此而言,还有“前进”按钮),他将不会在应用程序内导航。用户可能希望使用他之前加载的不同 "pages" 的历史记录在应用程序中导航。相反,他将被扔出网络应用程序。点击刷新按钮也会把他带到应用程序的根目录。
从用户的角度来看,它是一个普通的网络应用程序(他不需要知道它是如何设计的:SPA 或其他)并且它应该像任何网络 app/website 一样工作。路由确保了这一点,不是吗?
我时常有同样的问题。
我想说 SPA 中的路由器是组件层次结构助手。
正如@tech4242 所指出的,我们在 iOS 中没有类似 segue 的东西。那么如果不使用router,我们应该用什么来帮助用户导航呢?我们在这里谈论SPA。所以我们可以在 store 或 state 中管理它。是的,这是可行的,但不是可取的。
尝试从使用面向组件的库(React 或 Vue)的角度来思考这个问题。使用路由器帮助我们将特定组件用于特定路由。当用户在不同的路由之间来回移动时,我们依靠路由来告诉要显示的组件。我们简单地将一个组件与一个特定的路由耦合在一起,这使得我们的根组件(通常称为 App)清晰、可维护和可读。没有路由器,无论是根组件还是状态都将变得混乱且难以维护。
这是一个很好的问题,但我没有看到像我认为应该的那样经常讨论这个问题。简短的回答是,在单页 Web 应用程序中,您通常不需要路由。如果您正在构建一个不需要其页面被 Google 索引的应用程序,并且您不关心,或者不希望用户能够为页面添加书签,那么没有理由实现路由。
在 SPA 中,路由会增加额外的复杂性和工作量,因此如果可以避免,就应该避免。当然,Angular 和 React 等现代框架提供了使路由更容易的工具,但即便如此,有些事情也很难用路由完成,例如页面之间的动画。
路由冗余的 Web 应用程序的一个很好的例子是 multi-page 表单,您希望控制用户通过该表单并可能阻止他们 returning 到已变得不适用的页面。
使用路由实现这样的表单将是一场噩梦,因为您必须阻止用户访问其历史记录中的某些页面。
问问自己 SPA 中的路线实际上是什么很有用。很容易将其视为 'web-page',但它实际上是一种状态,当您在路线之间导航时,您真正在做的是在应用程序的不同状态之间导航。事实上,应用程序的外观可能会在状态之间发生变化,这与实际发生的事情是偶然的。因此,路由的作用是为用户提供一种 returning 到应用程序特定状态的方法。
只有当存在您希望用户能够 return 的应用程序状态时,您才应该在 SPA 中实施路由。
另一种可能更有用的方法是实施撤消和重做机制。
当然,即使你没有路线,你仍然需要关心当用户点击历史返回按钮时会发生什么,但是你只是有一个模态警报,警告他们他们即将离开该应用程序应该继续导航。
我了解到 https://github.com/ReactTraining/react-router 等 SPA 的路由库有助于解析 URL 并将应用置于状态机的相应状态。
路由还有比这更多的吗?
为什么首先需要路由?
为什么 URL 很重要?例如,在桌面应用程序中没有 URL,那么在网络应用程序中它们有什么大不了的?
在桌面应用程序中,您可以使用按钮和其他控件来获得所需内容。因此 UI 应用程序中的路由将是所有 UI 控件的集合。 另一方面,在网络应用程序中,所有功能都是通过一些文本(链接和参数)来访问的。
A URL 是访问功能的路径。路由类似于根据提供的 URL 和参数决定调用哪个功能的机制。
所以基本上路由是 URL 和网络服务器功能之间的映射。
SPA 中的路由用于加载 Web 应用程序的某些部分,例如yourappurl.com/profile/userid/
将使用与用户标识对应的正确用户配置文件加载 SPA 的配置文件部分。这可以在 GitHub example you provided:
<Router history={browserHistory}>
<Route path="/" component={App}>
<Route path="about" component={About}/>
<Route path="users" component={Users}>
<Route path="/user/:userId" component={User}/>
</Route>
<Route path="*" component={NoMatch}/>
</Route>
SPA 指的是这样一个事实,即通常您有一个 index.html 作为您的 "main view" 然后根据路由您 add/remove 来自 index.html 的某些部分与React 或 AngularJS 等框架
我也有这个问题:"Why do we need routing?"。您可以在完全没有路由的情况下编写应用程序。代码可能会变得混乱,但并非不可能。
我使用路由的最大原因是,如果用户点击浏览器的“后退”按钮(就此而言,还有“前进”按钮),他将不会在应用程序内导航。用户可能希望使用他之前加载的不同 "pages" 的历史记录在应用程序中导航。相反,他将被扔出网络应用程序。点击刷新按钮也会把他带到应用程序的根目录。
从用户的角度来看,它是一个普通的网络应用程序(他不需要知道它是如何设计的:SPA 或其他)并且它应该像任何网络 app/website 一样工作。路由确保了这一点,不是吗?
我时常有同样的问题。
我想说 SPA 中的路由器是组件层次结构助手。
正如@tech4242 所指出的,我们在 iOS 中没有类似 segue 的东西。那么如果不使用router,我们应该用什么来帮助用户导航呢?我们在这里谈论SPA。所以我们可以在 store 或 state 中管理它。是的,这是可行的,但不是可取的。
尝试从使用面向组件的库(React 或 Vue)的角度来思考这个问题。使用路由器帮助我们将特定组件用于特定路由。当用户在不同的路由之间来回移动时,我们依靠路由来告诉要显示的组件。我们简单地将一个组件与一个特定的路由耦合在一起,这使得我们的根组件(通常称为 App)清晰、可维护和可读。没有路由器,无论是根组件还是状态都将变得混乱且难以维护。
这是一个很好的问题,但我没有看到像我认为应该的那样经常讨论这个问题。简短的回答是,在单页 Web 应用程序中,您通常不需要路由。如果您正在构建一个不需要其页面被 Google 索引的应用程序,并且您不关心,或者不希望用户能够为页面添加书签,那么没有理由实现路由。 在 SPA 中,路由会增加额外的复杂性和工作量,因此如果可以避免,就应该避免。当然,Angular 和 React 等现代框架提供了使路由更容易的工具,但即便如此,有些事情也很难用路由完成,例如页面之间的动画。 路由冗余的 Web 应用程序的一个很好的例子是 multi-page 表单,您希望控制用户通过该表单并可能阻止他们 returning 到已变得不适用的页面。 使用路由实现这样的表单将是一场噩梦,因为您必须阻止用户访问其历史记录中的某些页面。
问问自己 SPA 中的路线实际上是什么很有用。很容易将其视为 'web-page',但它实际上是一种状态,当您在路线之间导航时,您真正在做的是在应用程序的不同状态之间导航。事实上,应用程序的外观可能会在状态之间发生变化,这与实际发生的事情是偶然的。因此,路由的作用是为用户提供一种 returning 到应用程序特定状态的方法。 只有当存在您希望用户能够 return 的应用程序状态时,您才应该在 SPA 中实施路由。 另一种可能更有用的方法是实施撤消和重做机制。
当然,即使你没有路线,你仍然需要关心当用户点击历史返回按钮时会发生什么,但是你只是有一个模态警报,警告他们他们即将离开该应用程序应该继续导航。