Ily*_*tok 3 react-router react-router-redux
我在使用react-router 2.x配置(特别是应用程序基本名称)时有些挣扎。
我有一个应用程序,在其整个生命周期中可能具有不同的基本根。例如:
/ 开发中/users 在生产中/account 迁移后投入生产基本名称在以下几个地方起作用:
redirectUrlAPI的调用我当前的解决方案是拥有一个ENV变量,并window.defs通过Express服务器进行注入,使其既可用于Webpack,也可用于应用程序本身,但最终仍然会${defs.APP_BASENAME}/signin在整个应用程序中出现太多问题。
如何提取应用程序库,或者至少将其存放在单个位置?我应该能够在Router的配置中指定基本路由,然后以某种方式简单地使用相对路由,对吗?还是我错过了什么?
今天我遇到了同样的问题:在我的本地主机上,我让 NGINX 在根上下文中提供内容,但在我的生产服务器上,Apache 从子目录中提供内容......
受到 Paul S 回答的启发,并受到这里信息的启发:https : //github.com/ReactTraining/react-router/issues/353
我得到了适合我的工作解决方案:
在 Webpack 配置文件中,我为我的 localhost dev env 定义了一个插件:
plugins: [
new webpack.DefinePlugin({
BASENAME: JSON.stringify("/")
})
],
Run Code Online (Sandbox Code Playgroud)
在 Webpack PROD配置文件中,我在子文件夹中为我的 prod 环境定义了一个插件,即 www.example.com/users:
plugins: [
new webpack.DefinePlugin({
BASENAME: JSON.stringify("/users/")
}),
Run Code Online (Sandbox Code Playgroud)
在我的反应路由器定义中,我只是参考:
import { Router, Route, IndexRoute, browserHistory } from 'react-router';
import { useBasename } from 'history'
...
<Router history={useBasename(() => browserHistory)({ basename: BASENAME })}>
Run Code Online (Sandbox Code Playgroud)
对我来说,这是一个非常优雅的解决方案,也很容易。我只花了大约五个小时环顾四周:-)
您可以history用basename装饰您的名字。您可以将其与DefinePluginWebpack配置中的混合使用,以指定应使用的基本名称。
// webpack.config.js
new Webpack.DefinePlugin({
BASENAME: '/users'
})
// somewhere in your application
import { useRouterHistory } from 'react-router'
import { createHistory } from 'history'
const history = useRouterHistory(createHistory)({
basename: BASENAME
})
Run Code Online (Sandbox Code Playgroud)
给定基本名称:/users,React Router将忽略/users路径名称开头的,因此:
URL /users在内部通过路径匹配/
URL /users/profile与路径匹配/profile。
同样,在应用程序中导航时,不必将基本名称附加到路径中。
<Link to='/friends'>Friends</Link>将在/friends内部导航到,但位置栏中的URL将是/users/friends。| 归档时间: |
|
| 查看次数: |
17722 次 |
| 最近记录: |