[英]UseSelector in react-native return undefined but variable in redux get updated
i have trying to using UseSelector to get data in a redux, but it's alwas returned undefined, but when i try log console.log teh variable that i wanted to get in redux it's get updated, but when i try console log the useSelector it's returned undefined我试图使用 UseSelector 在 redux 中获取数据,但它总是返回未定义,但是当我尝试记录我想在 redux 中获取的 console.log 变量时,它会被更新,但是当我尝试控制台记录 useSelector 时,它会返回不明确的
code 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 mainReducer
store 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 }
}
myConsole log test: myConsole 日志测试:
const resWorkinSec = useSelector((state)=>state.resultWorkinSecond)
<Pressable onPress={()=>{
dispatch(exchangetosecwork(hour,minute,second))
console.log(resWorkinSec)
}}>
Your reducer has multiple bugs:您的减速器有多个错误:
createSlice
这在旧版 Redux 减速器中是不允许的,但仅在使用createSlice
的现代 Redux 中return state.resultWorkinSecond
then even changes the full state structure. return state.resultWorkinSecond
然后甚至更改完整的状态结构。Correct legacy Redux code would look like this:正确的遗留 Redux 代码如下所示:
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
}
}
All that said, this is an old style of Redux that we do not recommend any more since 2019. It is more complicated, and error-prone.综上所述,这是自 2019 年以来我们不再推荐的旧式 Redux。它更复杂,而且容易出错。 And about 4 times the code modern Redux would be.大约是现代 Redux 代码的 4 倍。 Modern Redux does not use switch..case reducers, ACTION_TYPES, immtuable reducer logic (like you needed to do here), createStore
and the likes.现代 Redux 不使用 switch..case reducer、ACTION_TYPES、不可变的 reducer 逻辑(就像你需要在这里做的那样)、 createStore
等。
I would highly recommend you drop what you are doing for a moment and go through the official Redux tutorial .我强烈建议你暂时放下你正在做的事情并阅读官方的 Redux 教程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.