首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >usereducer不会更新状态

usereducer不会更新状态
EN

Stack Overflow用户
提问于 2020-09-25 00:41:57
回答 1查看 115关注 0票数 0

我对useReducer的反应是非常陌生的。如果我在这里粘贴我的代码,它会很长,因为它涉及组件,useContext和useReducer.So,我将只粘贴一些代码。我对try and catch循环中的状态有疑问。我的reducer启动了一个使用firebase signInWithEmailAndPassword()的登录方法。我是不是做错了try and catch循环?我可以在console.log中看到错误消息,但我的状态不会随着错误消息而更新,无论是在then().catch()中还是在try和catch循环中。

代码语言:javascript
复制
  const loginUser = (usename, password, state) => {
    try{

      const res = auth.signInWithEmailAndPassword(email, password).then( user => {
          return {...state, userid: user.uid}
        }).catch(error => {
              return {...state, error: error.message}
        })


    }catch (error) {
      console.log("oops !! error: ", error);
   
      return {...state, error: error, isLoggedIn:false, isLoading:false};
    }
}

export const storeReducer = (state, action) => {
    switch (action.type) {
      case USER_LOGIN: 
      
        return loginUser(action.username, action.password, state);
          
      default:
        return state;
    }
  };

上面的代码是我在使用useReducer更新状态时遇到的问题的简化版本。

EN

回答 1

Stack Overflow用户

发布于 2020-09-25 01:15:47

我会将您的loginUser函数更改为如下所示...

代码语言:javascript
复制
const loginUser = async (usename, password, state) => {
    try{
      const response = await auth.signInWithEmailAndPassword(email, password)

      return // return user here
    }catch (error) {
      console.log("oops !! error: ", error);
   
      return // return error here
    }
}

并且您应该根据此函数的返回来调度操作,或者从此函数调度。你不应该把这个函数放在你的归约器中,因为它是异步的,你的归约器应该是一个纯函数()。

应该更像..。

代码语言:javascript
复制
loginUser.then(data => {
  // dispatch accordingly
})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64050792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档