Dva: 建议:如何调用react-router-redux的API

Created on 26 Jul 2016  ·  14Comments  ·  Source: dvajs/dva

目前的项目无法通过dva调用react-router-redux的API。

建议在dva/router下提供调用react-router-redux的方式。

Most helpful comment

module.exports = require('react-router')
module.exports.routerRedux = require('react-router-redux')

这个方案 +1,命名想不好就先叫 routerRedux 吧。

All 14 comments

是指 push, replace 这些吗?

嗯,以及LOCATION_CHANGE这些action

方便的话,你发个 pr ?

好的

建议将 react-router-redux 跟 dva/router 一样,暴露出来就好了,然后自己在start里面去写middleware

@nikogu react-router-redux 已经内置了的,只不过没有暴露接口。都是路由相关,放在 dva/router 感觉比较合适的。有其他更合适的 export 方式?

@sorrycc 我感觉放到 dva/router 也挺好的,多暴露一个感觉也有点冗余,那么 @LeuisKen 这个调用api的方式,是不是可以『

import { routerMiddleware, push, browserHistory } from 'dva/router';

...
const App = app.start({
    middlewares: [routerMiddleware(browserHistory)]
});

// usage
dispatch(push('/foo'))

这样?

我现在也同意放在dva/router,我现在在想应该暴露哪些,感觉routerReducersyncHistoryWithStore都是没有必要暴露出来的。

我想先过一遍react-routerreact-router-redux的文档,看看哪些API是必要的,合并成一个对外的dva/router

@LeuisKen 我觉得我们可以不用关心该暴露哪些api,我们只需要把 react-routerreact-router-redux的merge到router里面一起返回就可以了,避免后面又有新增的api我们还得改,现在dva/router 就直接暴露了 module.exports = require('react-router');,现在就是多了一个 react-router-redux,你觉得如何,因为syncHistoryWithStore类似这样的api,暴露出来也没有关系

那就merge吧,这样确实是简单粗暴

先 reopen 了,pr 里写上 Close #23 自动关联上这里吧。

@LeuisKen 你先看下怎么最合理,然后改下,提个pr 🐒

对于如何优雅的引入react-router-redux遇到了一些困难

方案一:按 @nikogu 说的直接merge

实现一:

module.exports = { ...require('react-router'), ...require('react-router-redux') }

现在router.js并没有过babel,可以考虑在src中加入router.js或者修改配置来处理。或者用object-assign之类的包来处理,但dva引入这种包感觉不太合适。自己实现一个浅复制感觉也没太大意义。

实现二:

module.exports = require('react-router')
module.exports.routerRedux = require('react-router-redux')

我偏向这种方案,但是觉得很难找到一个合适的名字。。。

方案二:只引入需要的部分,我一开始的想法

module.exports = require('react-router');
module.exports.routerActions = require('react-router-redux').routerActions
module.exports.routerActions.CALL_HISTORY_METHOD = require('react-router-redux').routerActions.CALL_HISTORY_METHOD
module.exports.routerActions.LOCATION_CHANGE = require('react-router-redux').routerActions.LOCATION_CHANGE
module.exports.routerMileware  = require('react-router-redux').routerMiddleware

这样的问题 @nikogu 也说了,官方更新的话很不方便。

module.exports = require('react-router')
module.exports.routerRedux = require('react-router-redux')

这个方案 +1,命名想不好就先叫 routerRedux 吧。

Was this page helpful?
0 / 5 - 0 ratings