首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Redux-Router + React-Router向应用程序添加基本URL

使用Redux-Router + React-Router向应用程序添加基本URL
EN

Stack Overflow用户
提问于 2015-10-28 03:01:36
回答 4查看 20K关注 0票数 15

我同时使用了React-Router 1.0.0-rc3和Redux-Router 1.0.0-beta3。

在使用React-Router时,您可以结合使用useBasenamecreateHistory来设置应用程序的基URL,这样您就可以轻松地编写在子目录中运行的应用程序。Example

而不是这样:

代码语言:javascript
复制
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以这种方式编写代码

代码语言:javascript
复制
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中,您需要将history传递给reducer,而不是createHistory

代码语言:javascript
复制
const store = compose(
  applyMiddleware(m1, m2, m3),
  reduxReactRouter({
    routes,
    createHistory
  }),
  devTools()
)(createStore)(reducer);

在这种情况下,我们如何使用useBasename

EN

回答 4

Stack Overflow用户

发布于 2016-06-30 20:39:34

对于react-router v2或v3,并使用react-router-redux v4而不是redux-router,历史对象的设置将如下所示:

代码语言:javascript
复制
import { createHistory } from 'history'
import { useRouterHistory } from 'react-router'
import { syncHistoryWithStore } from 'react-router-redux'

const browserHistory = useRouterHistory(createHistory)({
  basename: '<yourBaseUrl>'
})
const history = syncHistoryWithStore(browserHistory, store)

当没有额外的基本URL时,设置的其余部分就像往常一样。

票数 13
EN

Stack Overflow用户

发布于 2015-10-28 03:01:36

您可以创建包装useBasename的函数

代码语言:javascript
复制
const createHistoryWithBasename = (historyOptions) => {
  return useBasename(createHistory)({
    basename: '/app_name',
    ...historyOptions
  })
}

并将其传递给compose

代码语言:javascript
复制
const store = compose(
  applyMiddleware(m1, m2, m3),
  reduxReactRouter({
    routes,
    createHistory: createHistoryWithBaseName
  }),
  devTools()
)(createStore)(reducer);
票数 2
EN

Stack Overflow用户

发布于 2016-01-21 01:03:28

应用程序接口经常变化,所以这就是我的工作(我使用的是redux-simple-router2.0.3版本)。我已经在一个单独的文件中定义了自定义历史:

代码语言:javascript
复制
import { useRouterHistory } from 'react-router'
import { createHistory, useBasename } from 'history'
import { baseUrl } from '../config'

const browserHistory = useRouterHistory(useBasename(createHistory))({
  basename: "/appgen"
});

现在我需要初始化存储:

代码语言:javascript
复制
import { syncHistory, routeReducer } from 'redux-simple-router'
import browserHistory from '../misc/browserHistory'

const rootReducer = combineReducers({
  // ...other reducers
  routing: routeReducer
});

const reduxRouterMiddleware = syncHistory(browserHistory);

const finalCreateStore = compose(
  // ...other middleware
  applyMiddleware(reduxRouterMiddleware),
)(createStore);


const store = finalCreateStore(rootReducer, initialState);

最后,您需要将history传递给Router

代码语言:javascript
复制
import browserHistory from './misc/browserHistory'
import routes from '../routes'

export default class Root extends Component {
  static propTypes = {
    history: PropTypes.object.isRequired
  };

  render() {
    return (
      <Router history={browserHistory}>
        {routes}
      </Router>
    )
  }
}

在我想出这个之前,我使用的是一个手动解决方案。我定义了我自己的Link组件和我自己的redux操作,它们负责前缀基URL。它可能对某些人有用。

更新的Link组件:

代码语言:javascript
复制
import React, { Component } from 'react'
import { Link as RouterLink } from 'react-router'
import { baseUrl } from '../config'

export default class Link extends Component {
  render() {
    return <RouterLink {...this.props} to={baseUrl + '/' + this.props.to} />
  }
}

自定义操作创建者:

代码语言:javascript
复制
import { routeActions } from 'redux-simple-router'
import { baseUrl } from '../config'

export function goTo(path) {
  return routeActions.push(baseUrl + '/' + path);
}

更新的根路由:

代码语言:javascript
复制
import { baseUrl } from './config'
export default (
  <Route component={App} path={baseUrl}>
    //...nested routes
  </Route>
);

请注意,这些自定义工具仅支持推送更新的路径,而不支持位置描述符对象。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33376414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档