Estoy usando Context/Asyncstorage para la gestión del estado. Almaceno los datos que regresaron del servidor al Asyncstorage.
getData.then( res => AsyncStorage.setItem('user', JSON.stringify(res.data)) )Y configuré el estado global del usuario con nombre en el proveedor global como se muestra a continuación.
const [userState, userDispatch] = useReducer( user, userInitialState, async () => { const storedUserData = await AsyncStorage.getItem('user'); return storedUserData != null ? JSON.parse(storedUserData) : userInitialState; }, );y aquí se obtiene el estado de usuario en otro componente
const SomeComponent = () => { const {userState} = useContext(GlobalContext); useEffect ( () => { console.log(userState.name); // undefined console.log(userState._W.name); // sammie (correct) }, []) return <View></View> }El problema es que el estado de la primera consola no está definido porque el estado del usuario se ve así
{ "_U": 0, "_V": 1, "_W": { "name": "sammie", "email": "sammie@test.com", "phone": "123123123" }, "_X": 0, }El valor esperado es
{ "_U": 0, "_V": 0, "_W": 0, "_X": 0, "name": "sammie", "email": "sammie@test.com", "phone": "123123123" }Probé con otro estado para la prueba. y cuando configuro el estado en useEffect hook como se muestra a continuación, regresa como se muestra arriba.
useEffect ( () => { storeTheme('light')(themeDispatch); // store the light mode to the global theme state }, [])La estructura de datos del estado de este tema no cambió como se indicó anteriormente. Estoy absolutamente conectado con esto. Por favor, dame un consejo en lo que estoy equivocado.
Gracias por cualquier consejo.
const [userState, userDispatch] = useReducer( user, userInitialState, async () => { const storedUserData = await AsyncStorage.getItem('user'); console.log(storedUserData); return storedUserData != null ? JSON.parse(storedUserData) : userInitialState; }, );Intente iniciar sesión igual que arriba y verifique la salida. Siento que tal vez el equipo de api te envió el objeto de esta manera.