我是react native的初学者,如果用户已登录,我正在开发一个小型应用程序以显示firebase数据库的供稿。因此,在调用isloggedin函数之后,我使用then函数显示firebase数据。

这是我的isLoggedIn函数:

export const isLoggedIn = () => {
  return dispatch => {
    firebase.auth().onAuthStateChanged(user => {
      if(user){
          Actions.main();
          dispatch({
              type:LOGGED_IN
          })
      }else {
          Actions.auth();
          dispatch({
              type:NOT_LOGGED_IN
          })
      }
    });
  }
};


我在componentDidMount函数中调用isLoggedIn函数;

componentDidMount (){
    this.props.isLoggedIn()
        .then(() => {
            this.props.fetchTweet();
        });
}


但是我遇到这样的错误:undefined不是对象(评估'this.props.isLoggedIn()。then')
我希望从代码中显示出我的Firebase数据。
顺便说一句,fetchTweet在没有功能的情况下工作,如果我不使用'then',则isLoogedin也可以工作

最佳答案

这将不起作用,因为this.props.isLoggedIn()返回一个接受调度对象的函数。 redux thunk(中间件)将拦截此操作。因此,这没有兑现承诺,因此不可补救。它将产生错误。正确的方法是:

componentDidMount (){
    // calling only the action creator
    this.props.isLoggedIn()
}


在减速器中监听动作,例如:

// Typical reducer
function(state = INITIAL_STATE, action) {
 switch(action.type) {
   case LOGGED_IN :
    // change your state according to the business logic
    // for example make a flag IsLoggedIn and make it true
     const changed_state =  // Your changed state
     return changed_state
   default:
     return state;
 }


将状态从mapStateToProps注入到Component,然后执行逻辑,然后执行this.props.fetchTweet()

// Implementing mapStateToProps function
 const mapStateToProps = function(state) {
   // get the key from the state
   const loginSuccess = state.IsLoggedIn
   return {
        loginSuccess
        }



componentWilReceiveProps(nextProps) {
if(nextProps.loginSuccess && this.props.loginSuccess !== nextProps.loginSuccess) {
 this.props.fetchTweet()
}
}

关于javascript - React Native-未定义不是对象(评估this.props.isLoggedIn.then),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54334491/

10-11 13:52