Je veux définir une URL qui pourrait être utilisée pour déconnecter l'utilisateur (envoyer une action qui déconnecterait l'utilisateur). Je n'ai pas trouvé d'exemples montrant comment implémenter une route distribuant un événement.
Voici une implémentation plus récente pour une telle /logout
page:
import { Component, PropTypes } from 'react'
import { connect } from 'react-redux'
import { withRouter } from 'react-router'
import * as authActionCreators from '../actions/auth'
class LogoutPage extends Component {
componentWillMount() {
this.props.dispatch(authActionCreators.logout())
this.props.router.replace('/')
}
render() {
return null
}
}
LogoutPage.propTypes = {
dispatch: PropTypes.func.isRequired,
router: PropTypes.object.isRequired
}
export default withRouter(connect()(LogoutPage))
Définissez un itinéraire /authentication/logout
:
import React from 'react';
import {
Route,
IndexRoute
} from 'react-router';
import {
HomeView,
LoginView,
LogoutView
} from './../views';
export default <Route path='/'>
<IndexRoute component={HomeView} />
<Route path='/authentication/logout'component={LogoutView} />
<Route path='/authentication/login' component={LoginView} />
</Route>;
Créez un LogoutView
qui envoie une action sur componentWillMount
:
import React from 'react';
import {
authenticationActionCreator
} from './../actionCreators';
import {
connect
} from 'react-redux';
import {
pushPath
} from 'redux-simple-router';
let LogoutView;
LogoutView = class extends React.Component {
componentWillMount () {
this.props.dispatch(authenticationActionCreator.logout());
this.props.dispatch(pushPath('/'));
}
render () {
return null;
}
};
export default connect()(LogoutView);
Le rappel componentWillMount
envoie deux actions:
IndexRoute
.this.props.dispatch(authenticationActionCreator.logout());
this.props.dispatch(pushPath('/'));
Voici l'implémentation la plus récente de /logout
page:
import React, { Component } from "react";
import PropTypes from "prop-types";
import { connect } from "react-redux";
import { Redirect } from "react-router-dom";
import * as authActionCreators from "../actions/auth";
class LogoutPage extends Component {
static propTypes = {
dispatch: PropTypes.func.isRequired
};
componentWillMount() {
this.props.dispatch(authActionCreators.logout());
}
render() {
return (
<Redirect to="/" />
);
}
}
export default connect()(LogoutPage);
Fonctionne pour:
"react": "^15.6.1",
"react-dom": "^15.6.1",
"react-redux": "^5.0.6",
"react-router-dom": "^4.2.2",
"prop-types": "^15.5.10",