Reactjs 未触发React Redux还原程序
我无法理解为什么在一种情况下调用reducer而在另一种情况下不调用reducer。下面给出了页脚组件 文件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
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如果您将这些操作传递给一个不只是连接的子组件,这是有意义的。。