【发布时间】:2017-12-14 16:52:05
【问题描述】:
在index.js 中直接 push 或 throw dispatch 效果很好:
...
import { push } from 'react-router-redux'
const browserHistory = createBrowserHistory()
export const store = createStore(
rootReducer,
applyMiddleware(thunkMiddleware, routerMiddleware(browserHistory))
)
// in v5 this line is deprecated
export const history = syncHistoryWithStore(browserHistory, store)
history.push('/any') // works well
store.dispatch(push('/any')) // works well
ReactDOM.render((
<Provider store={store}>
<Router history={history}>
<App />
</Router>
</Provider>
), document.getElementById('root'))
App.js
class App extends Component {
render() {
return (
<div className="app">
<Switch>
<Route path="/" component={Main} />
<Route path="/any" component={Any} />
</Switch>
</div>
);
}
}
export default withRouter(connect(/*...*/)(App))
但在 redux-thunk 操作中,所有尝试都以重写 url 结束,但 没有重新渲染
...
export function myAction(){
return (dispatch) => {
// fetch something and then I want to redirect...
history.push('/any') // change url but not re-render
dispatch(push('/any')) // change url but not re-render
store.dispatch(push('/any')) // change url but not re-render
}
}
这个myAction 正在内部调用 fetch() 并且应该在成功后重定向。
如果我在组件内部运行this.props.history.push('/any'),它就可以工作!但我需要在成功fetch()
我试图用withRouter 或Route 包装所有组件,但没有帮助。
【问题讨论】:
-
您使用哪个版本的
react-router-redux?您需要使用与react-routerv4 兼容的react-router-reduxv5。 Th 包react-router-reduxv5 目前正在积极开发中。 -
@oklas 现在我尝试在
react-router-reduxv5 上运行它,但它的行为与 v4 相同 -
这很可能还没有实现。作为解决方法,将此委托给
routerhistory对象可用的组件。您的推送事件始终出现在 thunk 队列的末尾,因此您可以使用重定向信息设置状态。 -
能否提供
代码? -
Edited 通过提供更多代码进行查询,并且我还提供了一个答案,我如何解决此问题,但仍在等待是否有人提供解决方案如何直接从重击动作。
标签: reactjs react-router redux-thunk react-router-redux