如何使用react-router

时间:2016-12-20 13:07:43

标签: javascript reactjs webpack react-router webpack-dev-server

我有一个使用反应路由器的应用。我已经设置了我的开发环境来使用它,当我想要刷新页面时,我没有问题,或者服务器自己做,但是当我进行生产构建时。如果任何用户使用应用程序中的刷新按钮,则会出现404错误。

我知道在服务器中(我的prod构建将在ISS srv中),应用程序试图访问的路由器所做的路由不存在,那么我该如何解决这个问题呢? /> 我需要做什么以及如何做? 我对此非常陌生。

感谢您的时间和帮助!

2 个答案:

答案 0 :(得分:1)

我将尝试解释路由器如何管理您的应用程序状态。

说你有跟随路由器

<Router>
   <Route to="/" component={Home}>
     <Route to ="/about" component={About} />
    </Route>
<Router>

假设您在应用程序的主页上,/。现在说yoy使用主页上的/about导航到Link网址。这将由您的react路由器提供。事情很好。

现在说,当你在/about路线时,你刷新页面。现在,Web浏览器就像任何页面请求(无论是否是单页应用程序)都会向您的后端服务器发送请求以获取页面。因此,您需要在后端为第一页加载配置路由。

现在你必须使用webpack编译你的反应组件并获得一个捆绑输出吗?你把你的html文件放入?现在所有路由都只提供此html文件。

当你有编译的JS文件时,react-router上的页面渲染会自动呈现页面。

现在配置路由有多种方法可以做到。其中一个是在后端添加所有路由,它们使用包含您的反应代码的已编译的javascript呈现相同的html文件。另一个可以使用nginx之类的东西,只返回那里的html。

答案 1 :(得分:-1)

对于您的生产设置,您需要设置ISS服务器,以便所有传入的URL请求都将返回index.html文件。我不确定在ISS中如何做到这一点,但在像Apache这样的东西中,你会使用URL重写。

您希望始终返回index.html的原因是因为index.html本质上是您的反应应用程序,react-router组件将处理路由并根据URL呈现所需内容。

您不会重写指向静态资源的URL(css / js / pngs / etc。文件)。为方便起见,您可能希望在您网站的/static/网址下提供所有静态文件。

因此,您希望配置服务器以使(*成为通配符):

/static/*返回URL中请求的任何静态资源

/*会返回您的index.html页面

在开发环境中运行时不必担心这个问题的原因是因为webpack-dev-server配置为为您完成所有操作。