【问题标题】:REACT Uncaught TypeError .then is not a functionREACT Uncaught TypeError .then 不是函数
【发布时间】:2017-06-24 04:19:01
【问题描述】:

我在我的反应组件中做这样的功能:

const Logged = (props) => {

  const doLogout = () => {
    props.logout().then(() => browserHistory.push('/'));
  }

  return(
    <IconMenu
      {...Props}
      iconButtonElement={
        <IconButton><MoreVertIcon /></IconButton>
      }
      targetOrigin={{horizontal: 'right', vertical: 'top'}}
      anchorOrigin={{horizontal: 'right', vertical: 'top'}}
    >
      <MenuItem primaryText="Sign out" 
        onTouchTap={doLogout}
      />
    </IconMenu>
  )
};

我已经在组件中包装了调度并连接它。

const mapDispatchToProps = (dispatch) => {
    return {
        logout: () => (
            dispatch(logoutUser)
        )
    }
}

这是我的行动:

export function logoutUser(){
    return (dispatch) => {
        return new Promise((resolve) => { 
            dispatch({
                type    : LOGOUT_USER,
            });
            resolve();
        })
    }
};

这是我的减速器:

case LOGOUT_USER :  
            return Object.assign({}, state, {autenticated : false});

我总是遇到这个错误

Uncaught TypeError: props.logout(...).then 不是函数 在 Object.doLogout [as onTouchTap] (eval at

【问题讨论】:

  • dispatchdispatch(logoutUser) 中返回什么?
  • @Bergi 一个承诺?
  • 嗯,看起来不像,不。有没有关于dispatch 的文档?

标签: reactjs promise redux react-router


【解决方案1】:

我想你是说

function mapDispatchToProps(dispatch) {
    return {
        logout: logoutUser(dispatch)
    };
}

export function logoutUser(dispatch) {
    return () => {
        return new Promise((resolve) => { 
            dispatch({
                type: LOGOUT_USER,
            });
            resolve();
        });
    };
}

虽然看起来没有任何异步发生,所以没有理由等待任何事情。

【讨论】:

  • 非常感谢。这行得通。但我还是不明白,你能解释一下为什么它以前不起作用。在我的 vs 代码中,我看到我的操作 logoutUser 会返回承诺。我正在做异步,因为它需要将身份验证更改为 false 然后将其重定向到“/”,有没有更好的方法?@Bergi
  • 在你的代码中logoutUser 不返回一个promise,而是一个函数;它甚至没有被调用,而只是传递给dispatch(其结果确实得到了返回,而不是一个承诺)。
猜你喜欢
  • 1970-01-01
  • 2020-04-17
  • 1970-01-01
  • 1970-01-01
  • 2021-07-24
  • 1970-01-01
  • 1970-01-01
  • 2022-09-28
  • 2020-04-29
相关资源
最近更新 更多