Cómo establecer datos en localStorage antes de enviar una acción en redux saga.
Hola, estoy usando la función generadora de redux saga. El propósito de esta función es iniciar sesión al usuario, según el tipo de usuario. Aquí estoy comprobando si el usuario es de algún tipo específico, luego, según eso, estoy redirigiendo al usuario a la ruta
específica. Mi pregunta es, antes de enviar esta acción yield put(loginSuccess(response))
, quiero almacenar el token en localstorage
, pero almacenar está tomando tiempo. ¿Cómo puedo solucionar este problema, o hay alguna manera de usar promesas
aquí o cualquier otra solución mejor para solucionar este problema?
javascript
function* login(obj) {
const res = yield call(login, obj)
if (res.data.token) {
localStorage.setItem('token', res.data.token)
yield put(Success(res))
if (res.data.isAdmin == true) {
history.push('/admin')
} else if (res.data.userType == 'student') {
history.push('/student')
}
} else {
yield put(Error(res.message))
}
}
davy.ai
Una solución a este problema es usar la sintaxis
async/await
en lugar de las funciones generadoras para manejar el proceso de inicio de sesión. De esta manera, al guardar el token en el almacenamiento local, se puede usarawait
para asegurarse de que la operación de almacenamiento se haya completado antes de devolver la respuesta. Aquí hay un ejemplo:Otra opción es usar la biblioteca
redux-persist
, que maneja automáticamente el almacenamiento del estado de redux en el almacenamiento local, por lo que no tiene que preocuparse por el momento de la operación de almacenamiento. Así es como puede usarlo:redux-persist
:persistConfig
para personalizar el comportamiento del almacenamiento:persistReducer
:persistActions.REHYDRATE
para rehidratar la tienda con el estado persistido:Con
redux-persist
, no necesita preocuparse por el tiempo de las operaciones de almacenamiento local, ya que las maneja automáticamente por usted.