Ich habe einen einfachen Anwendungsfall, der innerhalb der React-Router 4 und Redux-Umgebung ziemlich schwierig zu erreichen scheint.Redirect Benutzer mit React-Router 4 und Redux-Promise
Wenn sich ein Benutzer anmeldet, wird eine reduktive Versprechensaktion ausgelöst, die ein API-Token, Ablaufdatum und einige andere Informationen zurückgibt. Wenn und wenn das Versprechen erfüllt ist, möchte ich dann den Benutzer auf eine andere Seite umleiten.
Ich kann nicht herausfinden, wie ein Benutzer programmgesteuert mit der obigen Architektur umleiten. Ich möchte es in Action.js machen, aber es scheint, dass es nur in Reducers.js gemacht werden kann. Obwohl ich nicht sicher bin, wie ich anfangen soll.
Der beste Weg, den ich bisher gefunden habe, ist eine Redirect-Komponente in meiner Ansicht zu haben, und die Verheißung setzen den Status eingeloggt auf true, wenn die geloggte in der Ansicht wahr ist, wird es dann die Umleitung prop zurückkehren dann leiten Sie den Benutzer auf die gewünschte Seite um. Irgendwie fühlt sich das wie viel zusätzlicher Code für einen einfachen Anwendungsfall an.
Jeder Rat wäre hilfreich. Vielen Dank.
Action.js:
import axios from 'axios';
export function login(email, password) {
return {
type: 'LOGIN_USER',
payload: axios.post('http://localhost:3114/api/users/authenticate',
{
email,
password,
}),
};
}
Reducers.js
// Promise
// pending
// fulfilled
// rejected
const initalState = {
token: null,
expiryDate: '',
loading: false,
error: null,
};
// REDCUER
function loginReducer(state = initalState, action) {
switch (action.type) {
case 'LOGIN_USER_PENDING':
return { ...state, loading: true };
case 'LOGIN_USER_FULFILLED':
return {
...state,
loading: false,
token: action.payload.data.token,
expiryDate: action.payload.data.expires,
loggedIn: true,
};
case 'LOGIN_USER_REJECTED':
return { ...state, loading: false, error: `${action.payload}` };
default:
return state;
}
}
export default loginReducer;
LoginView.js
render() {
const { data, login, loggedIn } = this.props;
if (data.loggedIn) {
return <Redirect to="/users" push />;
}
return (
...
)
}
Grüße, Emir
ein wenig Glück mit 'history.push' zu tun, wie ich vorgeschlagen ? – jonahe
@jonahe Danke für das Follow-up. Wird dich an einem Tag wissen lassen. Im Moment arbeite ich an 3 Projekten, ein bisschen Jonglieren. – eGlu