Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 未触发React Redux还原程序_Reactjs_Debugging_Redux_React Redux_Reducers - Fatal编程技术网

Reactjs 未触发React Redux还原程序

Reactjs 未触发React Redux还原程序,reactjs,debugging,redux,react-redux,reducers,Reactjs,Debugging,Redux,React Redux,Reducers,我无法理解为什么在一种情况下调用reducer而在另一种情况下不调用reducer。下面给出了页脚组件 文件Footer.jsx import React from 'react'; import {bindActionCreators} from 'redux'; import {connect} from 'react-redux'; import './Footer.scss'; import * as footerActions from '../../redux/actions/foo

我无法理解为什么在一种情况下调用reducer而在另一种情况下不调用reducer。下面给出了页脚组件

文件
Footer.jsx

import React from 'react';
import {bindActionCreators} from 'redux';
import {connect} from 'react-redux';
import './Footer.scss';
import * as footerActions from '../../redux/actions/footer';

const mapStateToProps = (state) => {
  return state;//{state: state, footerState: getFooterData(state)};
};

// Footer component is aware of only footer actions
const mapDispatchToProps = (dispatch) => {
  return {
    actions: bindActionCreators(footerActions, dispatch)
  };
};

var Footer = React.createClass({
  propTypes:{
    state: React.PropTypes.object,
    actions: React.PropTypes.object
  },
  componentWillMount() {
    this.props.actions.changeLanguage("dutch");//<-- This calls reducer and changes language
  },
  changeLang(language) {
    this.props.actions.changeLanguage("spanish");//<--- This doesn't calls reducer
  },
  render() {
    var that = this;
    return (
      <div className="footer">
        <div onClick={that.changeLang.bind(that, 'english')}>English</div>
        <div onClick={that.changeLang.bind(that,'german')}>German</div>
      </div>
    );
  }
});
export default connect(mapStateToProps, mapDispatchToProps)(Footer);
减速机文件
footer

export const LANGUAGE_CHANGE  = 'LANGUAGE_CHANGE';

export function changeLanguage(data, context) {
  return {
    type: LANGUAGE_CHANGE,
    data
  };
}
import { LANGUAGE_CHANGE } from '../actions/footer';

export default function footer(state = {}, action) {
  switch (action.type) {
    case LANGUAGE_CHANGE:
      debugger;
      return  Object.assign({}, state, {language:action.data});
    default:
      return state;
  }
}

footer.jsx
组件代码中,从
componentDidMount
方法中分派
LANGUAGE\u CHANGE
操作成功调用
footer
reducer,但从
changeLang
方法分派
LANGUAGE\u CHANGE
操作时未调用reducer。不知道出了什么问题?感谢您的帮助。

是否有任何javascripts错误?debbuger在
this.props.actions.changeLanguage
内部调试时给您带来了什么?没有javascript错误。它控制
函数bindActionCreator(actionCreator,dispatch){return function(){return dispatch(actionCreator.apply(未定义,参数));};}
为什么要使用
bindActionCreators
?从文档中可以看出:“bindActionCreators的唯一用例是当您想要将一些动作创建者传递给一个不知道Redux的组件时”。您的页脚组件已经包装在connect中,因此这有点多余。@azium:将bindActionCreators与connect一起使用是常见的用例。我不认为这有什么问题this@DamienLeroux如果您将这些操作传递给一个不只是连接的子组件,这是有意义的。。