Intenté usar UseSelector para obtener datos en un redux, pero siempre se devolvió sin definir, pero cuando intento iniciar sesión en console.log, la variable que quería obtener en redux se actualiza, pero cuando intento la consola, registro el useSelector, se devuelve indefinido
código redux:
export const EXCHAHNGETOSECOND = 'EXCHANGETOSECOND' export const exchangetosecwork = (hour,minute,second) =>({ type:EXCHAHNGETOSECOND, payloadhourwork : hour, payloadminutework : minute, payloadsecondwork : second }) let initialState ={ resultWorkinSecond : 0 } export const mainReducer = (state=initialState, action) =>{ switch (action.type) { case EXCHAHNGETOSECOND: const hourTosecond = action.payloadhourwork * 3600 const minuteTosecond = action.payloadminutework * 60 const res = hourTosecond+minuteTosecond+action.payloadsecondwork state.resultWorkinSecond = res console.log(state.resultWorkinSecond); return state.resultWorkinSecond default: return state } } export default mainReducertienda redux:
import { createStore } from "redux"; import mainReducer from "./redux"; import AsyncStorage from '@react-native-async-storage/async-storage'; import { persistStore, persistReducer } from 'redux-persist' const persistConfig={ key:'root', storage:AsyncStorage, }; const persistedReducer = persistReducer(persistConfig,mainReducer) export default() => { let store = createStore(persistedReducer) let persistor = persistStore(store) return{ store, persistor } }Prueba de registro de myConsole:
const resWorkinSec = useSelector((state)=>state.resultWorkinSecond) <Pressable onPress={()=>{ dispatch(exchangetosecwork(hour,minute,second)) console.log(resWorkinSec) }}>[resultado de registro de consola 1
Su reductor tiene múltiples errores:
createSlicereturn state.resultWorkinSecond incluso cambia la estructura de estado completa.El código heredado correcto de Redux se vería así:
export const mainReducer = (state=initialState, action) =>{ switch (action.type) { case EXCHAHNGETOSECOND: const hourTosecond = action.payloadhourwork * 3600 const minuteTosecond = action.payloadminutework * 60 const res = hourTosecond+minuteTosecond+action.payloadsecondwork return { ...state, resultWorkinSecond: res } default: return state } } Dicho todo esto, este es un estilo antiguo de Redux que ya no recomendamos desde 2019. Es más complicado y propenso a errores. Y aproximadamente 4 veces el código Redux moderno sería. Modern Redux no usa switch..case reducers, ACTION_TYPES, lógica reductora inmutable (como necesitabas hacer aquí), createStore y similares.
Recomiendo encarecidamente que dejes lo que estás haciendo por un momento y sigas el tutorial oficial de Redux .