首页 > 解决方案 > React 没有导入 redux 动作,即使它被导出了

问题描述

我有这个动作:

export const setActive = (index,payload) => ({
  type:actionTypes.SET_ACTIVE,
  payload,
  id
})

这是减速器:

case actionTypes.SET_ACTIVE:
          return {
            ...state,
            accounts:[...state.accounts,{active:action.payload,id:action.id}]
          }

这就是我在组件中导入它的方式:

import { connect } from "react-redux";
import { bindActionCreators } from 'redux';
import { setActive } from '../../redux/user/actions'


const mapDispatchToProps = dispatch => ({
  actions: bindActionCreators(
    {
      setActive
    },
    dispatch,
  ),
});


const mapStateToProps = createStructuredSelector({
  GetAccounts: getAccounts,
});

export default connect(mapStateToProps, null)(UserMenuAccounts);

这就是我在函数中使用它的方式:

setActiveFunc = (item) => {
    const {actions} = this.props
    console.log("Info",item.active,item.id)
    actions.setActive(!item.active,item.id)
  };

但是当这个函数被执行时,我得到了这个错误TypeError: undefined is not an object (evaluating 'actions.setActive')

关于为什么会发生这种情况以及如何解决它的任何建议?

标签: reactjs

解决方案


您实际上并没有将您的信息传递mapDispatchToPropsconnectHOC。

const mapDispatchToProps = dispatch => ({
  actions: bindActionCreators(
    {
      setActive
    },
    dispatch,
  ),
});


const mapStateToProps = createStructuredSelector({
  GetAccounts: getAccounts,
});

export default connect(mapStateToProps, null)(UserMenuAccounts); // passed null!!

解决方案

传给HOC mapDispatchToPropsconnect

export default connect(mapStateToProps, mapDispatchToProps)(UserMenuAccounts);

推荐阅读