据说服务端渲染的时候路由是无状态的,所以要用StaticRouter,而BrowserRouter使用 HTML5 提供的 history API (pushState, replaceState 和 popstate 事件) 来保持 UI 和 URL 的同步。
想问下StaticRouter和BrowserRouter的区别在于什么地方,无状态和有状态分别是什么意思?
据说服务端渲染的时候路由是无状态的,所以要用StaticRouter,而BrowserRouter使用 HTML5 提供的 history API (pushState, replaceState 和 popstate 事件) 来保持 UI 和 URL 的同步。
想问下StaticRouter和BrowserRouter的区别在于什么地方,无状态和有状态分别是什么意思?
10 回答11.6k 阅读
2 回答3.1k 阅读✓ 已解决
3 回答2.7k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
1 回答1.8k 阅读✓ 已解决
今天刚在看ssr,也是没搞懂static router。后来懂了。
其实是这样,因为服务器就是
请求->响应
这种结构,根据不同的url返回不同的html响应,可以理解成纯函数。你有状态,根本就没有意义。静态路由就是为了方便开发者,实际上自己做路由也完全可行。看官方的例子的意思就是,当路由到了<Redirect>组件的时候,这个时候服务器理应发送一个重定向的信号,这个时候在渲染<Redirect>组件的逻辑中就会判断是否有
staticContext
这个prop,如果有就会给这个prop添加一个属性,当渲染的函数运行完之后,外部的context
就会出现之前添加的属性,表示路由到了<Redirect>组件,需要将响应码变为301。