【发布时间】:2016-01-27 08:41:59
【问题描述】:
我正在使用React-Router1.0.0-rc3 和Redux-Router1.0.0-beta3。
在使用 React-Router 时,您可以使用 useBasename 和 createHistory 来设置应用程序的基本 URL,以便您可以轻松编写在子目录中运行的应用程序。 Example:
而不是这个:
import { createHistory } from 'history';
let base = "/app_name/"
<Router history={browserHistory}>
<Route path={base} component={App}></Route>
</Router>
<Link path={base + "some_path"}>some_path</Link>
你可以用useBasename这样写:
import { createHistory, useBasename } from 'history';
const browserHistory = useBasename(createHistory)({
basename: "/app_name"
});
<Router history={browserHistory}>
<Route path="/" component={App}></Route>
</Router>
<Link path="/some_path">some_path</Link>
但是,在 Redux-Router 中,您需要将 createHistory 而不是 history 传递给 reducer:
const store = compose(
applyMiddleware(m1, m2, m3),
reduxReactRouter({
routes,
createHistory
}),
devTools()
)(createStore)(reducer);
在这种情况下我们如何使用useBasename?
【问题讨论】:
-
我不确定第二个示例(“您可以使用 useBasename 以这种方式编写”)的含义。它似乎正在使用“历史”模块(不是 React 的一部分)。此外,如果您已经在使用从 react-router 导入的“browserHistory”对象,则不能用“const browserHistory”定义覆盖它。如果我将其替换为“newBrowserHistory”,则会收到错误“TypeError: _history.useBasename is not a function”。所以老实说,我无法对这个例子做出正面或反面。
标签: javascript reactjs redux react-router