mapDispatchToProp не работает при использовании в качестве объекта. Но когда я использую его классическим способом, явно возвращая отправку, он работает нормально. Код выглядит следующим образом:
const incrementValue = () => ({
type: 'INCREMENT',
});
const decrementValue = () => ({
type: 'DECREMENT',
});
const reducer = (state = initState, action) => {
if(action.type === 'INCREMENT') {
return {
count: state.count + 1,
};
}
if(action.type === 'DECREMENT') {
return {
count: state.count - 1,
};
}
return state;
}
const store = createStore(reducer);
class Counter extends Component {
render() {
const {count, increment, decrement} = this.props;
console.log(count, increment, decrement);
return(
<div className="counter">
<p>{count}</p>
<div className="controls">
<button onClick={increment}>Increment</button>
<button onClick={decrement}>Decrement</button>
</div>
</div>
)
}
}
const mapStateToProps = (state) => {
return state;
};
const mapDispatchToProp = (dispatch) => {
return {
increment() {
dispatch(incrementValue());
},
decrement() {
dispatch(decrementValue());
}
};
};
const dispatchActions = {
incrementValue,
decrementValue
}; // Not Working // mapDispatchToProps as an object
const CounterContainer = connect(mapStateToProps, mapDispatchToProp)(Counter);
ReactDOM.render(
<Provider store={store}>
<CounterContainer />
</Provider>
, document.getElementById("root"));
Когда я использую объект dispatchActions во втором параметре вместо mapDispatchToProp, он работает не так, как ожидалось. Что случилось? Изменить: я инициализировал счет следующим образом
const initState = {
count: 0,
};