useSelector() 返回未定义

时间:2021-07-03 18:19:46

标签: javascript reactjs react-native redux react-redux

我只学习了 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),但是没有用! 这是发生的事情的屏幕截图 enter image description here

但是当我将它添加到登录按钮时,它返回true,然后继续未定义

<Formik
        validateOnMount
        validationSchema={loginValidationSchema}
        initialValues={{ email: '', password: '' }}
        onSubmit={
          () => {
            handleLogin()
            console.log('When submit ' + Login) // true then undefined
            SetTimer();
          }
          // () => navigation.navigate('Login')
        }
      >

enter image description here

请帮忙,非常感谢

1 个答案:

答案 0 :(得分:3)

您的选择器中的大小写错误。它应该是 return state.loginStatus。此外,您的 LoginAction 在技术上是一个reducer,而不是一个动作。

const Login = useSelector(state => {
  return state.loginStatus
})

编辑:reducer 中的另一个问题是初始状态将 initState 作为对象中的顶级键,当意图只是为了直接分配它时:

const LoginAction = (state = initState, action) = {
  // reducer code here
}