Counter
не обновляется при отправке, поскольку Counter
в render
на самом деле не является подключенным компонентом.
Согласно документации на connect
(https://react -redux.js.org / api / connect ):
Он не изменяет класс компонента, переданный ему; вместо этого он возвращает новый класс связанного компонента, который оборачивает переданный вами компонент.
Это означает, что простой вызов connect(mapStateToProps, null)(Counter);
не будет мутировать Counter
, но вместо этого он вернет подключенную версию. Этот возвращенный компонент - то, что вы хотите.
Быстрое решение проблемы - сохранить возвращаемое значение connect
:
const ConnectedCounter = connect(mapStateToProps)(Counter);
и использовать ConnectedCounter вместо Counter в рендере:
<Provider store={store}>
<ConnectedCounter count={0}/>
</Provider>
При подключении компонентов к хранилищу я предлагаю реализовать компонент в его собственном файле jsx
и экспортировать подключенный компонент по умолчанию.
В Counter.jsx
мы можем иметь ...
import { connect } from 'react-redux';
const Counter = props => {
console.log('>>> counter', props)
return (
<div>
<h1>counter (Redux Version)</h1>
<p>count: {props.count}</p>
</div>
);
}
const mapStateToProps = state => {
console.log('>>> map state to props', state);
return { count: state.counterReducer.count };
};
export default connect(mapStateToProps)(Counter);
... поэтому всякий раз, когда Counter
импортируется в другое место проекта (import Counter from '<path>/Counter'
), мы уверены, что Counter
уже является подключенным компонентом.