我对路由与react-router的工作方式有点混淆。
通常,当请求到达服务器以获取请求时:
http://www.example.com/path/to/file
请求将进入该文件的服务器,然后框架将处理请求。
使用react路由器,这是如何工作的?做事以某种方式在客户端(浏览器)被拦截,然后只有对index.html的请求将被发送到实际的Web服务器?
我假设以某种方式对/ path / to / file的请求被javascript捕获,只有对index.html的请求才能进入服务器,但它是如何做到的?
答案 0 :(得分:0)
React路由器是一个客户端路由器,所以当我们为nginx或任何网络服务器配置反应路由器时,我们指定并只发送一个名为index.html的文件,然后由反应路由器提供的JavaScript代码确定哪个通过查看浏览器的路径和历史来提供服务的组件。
所以无论你请求它的哪条路径间接获得请求的index.html,但是有一条不同的路径然后计算出该做什么。
答案 1 :(得分:0)
答案的一部分是查看路由器的basename prop。之后的所有内容都在客户端处理,作为与应用当前状态对应的位置。
答案的另一部分是当使用BroswerRouter时(而不是在本地应用程序状态之前在URL中使用#separator的HashRouter),服务器必须为任何路由提供应用程序“index.html”不对应于实际的静态资源或API路由。这通常被视为服务器的回退行为。
使用BrowserRouter时,如果您的服务器基本网址为http://example.com/app,并且您当前的应用状态为/ user / 12,则会生成当前浏览器网址http://example.com/app/user/12。如果您刷新浏览器,它会向http://example.com/app/user/12发出请求,您的服务器应用必须使用应用的index.html进行回答。加载后,react路由器会根据配置的基本名称将当前状态解释为/ user / 12。
使用具有相同服务器基本网址和应用状态的HashRouter时,当前浏览器网址为http://example.com/app/#/user/12,当刷新页面时,浏览器会向http://example.com/app/发送请求