Hola, estoy haciendo que la aplicación de inicio de sesión use firebase google login. Quiero guardar al usuario en el user-reducer . ¡La consola muestra información de usuario de Firebase! pero, Mantiene espectáculos indefinidos. No sé por qué se muestra así. ¡Por favor aconsejado!
[user-action ] import { UserType } from './user.types'; export const login = ({ currentUser }) => ({ type: UserType.USER_LOGIN, payload: currentUser, });[tipos de usuario]
export const UserType = { USER_LOGIN: 'USER_LOGIN', };[reductor de usuario]
import { UserType } from './user.types'; const INITAIL_STATE = { user: [], }; const userReducer = (state = INITAIL_STATE, action) => { switch (action.type) { case UserType.USER_LOGIN: return { ...state, user: action.payload, }; default: return state; } }; export default userReducer;[Iniciar sesión.js]
const Login = ({ googleLogin }) => { const [currentUser, setCurrentUser] = useState(null); const getUser = new Promise((resolve, reject) => { console.log('doing...'); firebase.auth().onAuthStateChanged(setCurrentUser); resolve(currentUser); console.log(currentUser); }); getUser .then(user => { googleLogin(user); }) .catch(error => { console.log(error); }); .... const mapDispatchToProps = dispatch => ({ onModal: () => dispatch(modalHandler()), googleLogin: currentUser => dispatch(login(currentUser)), }); export default connect(null, mapDispatchToProps)(Login);Su problema está en getUser , está resolviendo la promesa de pasar una variable de estado (currentUser) que puede no haberse configurado (porque setCurrentUser es asíncrono). Sugeriría modificar tu código de esta manera:
const getUser = new Promise((resolve, reject) => { console.log('doing...'); firebase.auth().onAuthStateChanged(firebaseUser => { setCurrentUser(firebaseUser); resolve(firebaseUser); console.log(firebaseUser); }); });export const login = ({ currentUser }) => ({ type: UserType.USER_LOGIN, payload: currentUser, });debiera ser -
export const login = (currentUser) => ({ type: UserType.USER_LOGIN, payload: currentUser, }); es decir, sin desestructuración de currentUser
O
googleLogin: currentUser => dispatch(login(currentUser))debiera ser
googleLogin: currentUser => dispatch(login({currentUser}))