我只学习了 react-native 基础,在使用 redux 时,我遇到了 useSelector
问题,这是我的一些代码
这里是商店组件
//store.js
initState = {
loginStatus: false,
}
const LoginAction = (state = {initState}, action) => {
if (action.type == 'changeLogin') {
return { loginStatus:!state.loginStatus }
}
return state
}
const store = createStore(LoginAction, composeWithDevTools());
export default store
这里是登录功能
function LoginScreen({ navigation, props }) {
const dispatch = useDispatch()
const Login = useSelector(state => {
return state.LoginStatus
})
function getLogin() {
return Login
}
function handleLogin() {
dispatch({ type: 'changeLogin' })
}
console.log('Login ' + Login) // it return undefined
我试过这个方法useSelector state returns undefined (React-Redux),但是没有用!
这是发生的事情的屏幕截图
但是当我将它添加到登录按钮时,它返回true,然后继续未定义
<Formik
validateOnMount
validationSchema={loginValidationSchema}
initialValues={{ email: '', password: '' }}
onSubmit={
() => {
handleLogin()
console.log('When submit ' + Login) // true then undefined
SetTimer();
}
// () => navigation.navigate('Login')
}
>
请帮忙,非常感谢
答案 0 :(得分:3)
您的选择器中的大小写错误。它应该是 return state.loginStatus
。此外,您的 LoginAction
在技术上是一个reducer,而不是一个动作。
const Login = useSelector(state => {
return state.loginStatus
})
编辑:reducer 中的另一个问题是初始状态将 initState
作为对象中的顶级键,当意图只是为了直接分配它时:
const LoginAction = (state = initState, action) = {
// reducer code here
}