Redux:将操作创建者导入另一个原因导致typeError'x不是函数'

时间:2018-09-04 11:48:14

标签: reactjs redux action

我面临的typeError确实使我感到困惑,并使我有点发疯:

我有一个汽车动作创作者:

import * as dispatchTypes from '../helper/dispatchTypes';
import { notifyBuyer } from  './buyer';

export const addCar = () => async dispatch => {
  const response = await fetch(someUrl, someBody)

  if (response.ok) {
    const car = await response.json();
    dispatch({type: dispatchTypes.ADD_CAR_RESPONSE, car});
    return notifyBuyer()(dispatch);
  };
}

我在buyer.js中也有一个notifyBuyer()的动作创建者:

...
export const notifyBuyer = () => async dispatch => {
...

最后,我也在React组件中调用notifyBuyer():

import * as actions from '../../actions/buyer';

class WhateverComponent extends React.Component {
  constructor(props) {
    super(props);
  }

  doSomething = event => {
    if (!event.disabled) {
      this.props.notifyBuyer(event.toString());
    }
  };

  render() {...}

}

export const StyledComponent = withStyles(styles)(WhateverComponent);
export default connect(
  state => ({}),
  {notifyBuyer: actions.notifyBuyer}
)(StyledComponent);

如果我运行该应用程序并运行doSomething函数,则会收到以下错误

TypeError: _this.props.notifyBuyer is not a function

有趣的是: 如果我从car.js中删除“ import {notifyBuyer};”,从car.js中删除,一切都很好。 但是,一旦在文件中设置了导入,Whatever-Component的道具就不再拥有notifyBuyer()函数,并且会抛出typeError。

1 个答案:

答案 0 :(得分:0)

我认为connect函数中使用的导出看起来像是错误的。使用下面的示例代码并签出。

export default connect(
  state => ({}),
  dispatch => ({notifyBuyer: dispatch(actions.notifyBuyer)})
)(StyledComponent);