Я исправил некоторые твои ошибки.Для начала, я предполагаю, что вы произвели разметку Provider
в своем корневом компоненте и сделали экземпляр в хранилище (если вы не уверены, отправьте содержимое файла App.js).
// component
const PageItem = ({ pageNumber, setCurrentPage }) => (
<li
className="page-link"
onClick={() => setCurrentPage(pageNumber)}
id={pageNumber}
>
{pageNumber}
</li>
);
const mapStateToProps = state => {
return {
page: state.currentPage
};
};
const mapDispatchToProps = {
setCurrentPage
};
export default connect(
mapStateToProps,
mapDispatchToProps
)(PageItem);
const pagesReducerDefaultState = {
currentPage: 1
};
Некоторые мысли:
- вы не можете использовать
this
в функции, только в классе mapDispatchToProps
может использоваться с простым литеральным объектом (например, Я узнал это недавно ).Тогда это менее многословно, потому что вы можете упомянуть только action creator
(в вашем примере setCurrentPage
) - , который вы отправили
setCurrentPage
в реквизитах, так что вы можете получить его, как я написал.Может быть, ES6 здесь загадочен, поэтому эквивалент ES5 будет:
function PageItem(props) {
return (
<li
className="page-link"
onClick={() => props.setCurrentPage(props.pageNumber)}
id={props.pageNumber}
>
{props.pageNumber}
</li>
);
};
// reducer
const initialState = {
currentPage: 1
};
export const reducer = (state = initialState, action) => {
switch (action.type) {
case "SET_CURRENT_PAGE":
return {
currentPage: action.currentPage
};
default:
return state;
}
};
- ваше состояние является объектом со свойством
currentPage
.Таким образом, ваш редуктор должен вернуть объект такого типа (поэтому return action.currentPage
был неправильным)