En index.js
pousser directement ou expédition throw fonctionne bien:Redux-réaction route poussée v4/v5() ne fonctionne pas à l'intérieur thunk l'action
...
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))
mais dans l'action redux-thunk
toutes les tentatives se termine par la réécriture url, mais sans re-rendu
...
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
}
}
Cette myAction
appelle fetch() à l'intérieur et devrait rediriger après le succès.
Si je cours this.props.history.push('/any')
à l'intérieur du composant, cela fonctionne! mais je dois courir rediriger l'intérieur action thunk après succès fetch()
Je tentais envelopper tous les composants avec withRouter
ou Route
, mais n'a pas aidé.
Quelle version de 'react-router-redux' utilisez-vous? Vous devez utiliser 'react-router-redux' v5 qui sera compatible avec' react-router' v4. Le paquet 'react-router-redux' v5 est actuellement développé activement. – oklas
@oklas Maintenant, j'ai essayé de l'exécuter sur le «réaction-routeur-redux' v5 mais il se comporte comme la v4 – Melounek
Très probablement, ce n'est pas encore implémenté. Comme solution de contournement Déléguez ceci au composant où l'objet 'router'' history' est disponible. Votre événement push apparaît toujours à la fin de la file d'attente de thunk afin que vous puissiez définir l'état avec les informations de redirection. – oklas