未使用mapDispatchtoProps映射的操作

时间:2016-12-24 18:28:31

标签: reactjs undefined action

大家好,快乐的x-mas 我已经使用这样的源代码创建并执行了操作:

export const SWITCH_LANGUAGE = 'SWITCH_LANGUAGE';

    export function switchLanguage(language) {

        return {
          type: SWITCH_LANGUAGE,
          payload: language
        };
    }

然后我想在我的page.js中将此动作作为道具 结果我写道:

import { switchLanguage } from '../actions/index';
...
function mapDispatchToProps(dispatch) {
  return bindActionCreators({ switchLanguage }, dispatch);
}
..
const switchLanguage = this.props.switchLanguage;

但是当我写一个console.log(props.switchLanguage)时,它会告诉我

function () {
        return dispatch(actionCreator.apply(undefined, arguments));
      }

为什么会这样?

1 个答案:

答案 0 :(得分:0)

您获得的输出是预期的。那里没有错。这一行:

function () {
    return dispatch(actionCreator.apply(undefined, arguments));
}   

是动作创建者(switchLanguage),其中已应用任何传入的参数(使用apply),然后将其传递到dispatch。这正是bindActionCreators的用途。

  

根据文档,当您想要将某些动作创建者传递给不知道的组件时,会使用bindActionCreators   Redux,您不希望将调度或Redux存储传递给它。   请参阅http://redux.js.org/docs/api/bindActionCreators.html

在您的组件中,您可以像访问的那样访问任何道具。然后,当您想要发送操作时,如果您之前从this.props.switchLanguage(/*language*/)中提取了该功能,请致电switchLanguage(/*language*/)this.props

只要您的reducer正确处理操作,一切都应该按预期工作。