由后端启发的路由
许多前端路由库都是由后端启发的。
他们只是在 url 改变的时候运行适当的路由处理程序,从而启动和渲染所需的组件。前端和服务端的结构是类似的,唯一的区别即是处理函数所做的事情。
为了演示其相似性,你可以在如下的代码中发现服务端 Express 框架,前端代码 page.js 路由和 React 相同的路由代码片段。
// Express
app.get('/login', sendLoginPage)
app.get('/app/:user/:account', sendApp)
// Page.js
page('/login', renderLoginPage)
page('/app/:user/:account', renderApp)
<!-- React -->
<Router>
<Route path="/login" component={Login}/>
<Route path="/app/:user/:account" component={App}/>
</Router>
React 隐藏了一些 JSX 背后的逻辑,但是它们做的都是同样的事情,在引入动态参数之前,它们都工作得很完美。
在上面的例子中,一个用户可能有多个账号并且当前账户可以随意更改。如果在 App
页面改变账户名,对应的处理程序为新的账户名重启或者重发相同的 App
组件 - 然而其实只需要更改现存组件里面的一些数据即可。
对于虚拟 DOM 解决方案这只是小菜一碟,因为它们会查找 DOM 的差异,然后只更新需要的部分 - 但是对于传统框架,这意味着更多不必要的工作。