В этом коде я нашел несколько проблем, поэтому я укажу их вам и надеюсь, что они могут вам помочь.
Прежде всего, взгляните на это:
const store = createStore(UpdateMenu, menuDate);
Для этого нужно создать новое хранилище и инициализировать его значением, которое вы передали в качестве аргумента . Поскольку вы передали один редуктор функции createStore
, значение, присвоенное state
, будет массивом, который вы имели в переменной menuDate
.
Прямо сейчас вы не можете получить доступ к state.menuDate
, потому что state
это не объект : он содержит сам массив. Если вы хотите получить этот массив, вам придется обновить метод MapStateToProps
следующим образом:
let MapStateToProps = (state) => {
return { menuDate: state }
}
Я также заметил, что вы используете combineReducers
, но в итоге вы не используя комбинированный редуктор для чего угодно.
let reducers = combineReducers({
UpdateMenu,
realtorsDate
});
Если вы хотите использовать оба, вы должны обновить вызов до createStore
, передав ему комбинированные редукторы, а не UpdateMenu
.
createStore(reducers)
Если вы решите использовать при этом имейте в виду, что созданное вами хранилище будет иметь следующую структуру:
{
UpdateMenu: [value returned by the UpdateMenu reducer],
realtorsDate: [value returned by the realtorsDate reducer]
}
Если вы хотите применить другую структуру для вашего хранилища, вы должны изменить передаваемый объект на combineReducer
. Вот пример:
combineReducers({
post: postReducer,
topic: topicReducer
})
Вы также должны взглянуть на то, как вы звоните connect
:
let MobileMenuContainer=connect(MapDispatchToProps,MapStateToProps)(MobileMenu);
Вы передаете два аргумента в обратный порядок . Как вы можете видеть в официальных react-redux
документах , MapStateToProps
должен быть первым параметром, а MapDispatchToProps
- вторым.
Последняя, и не в последнюю очередь, проблема, которую я обнаружил, заключается в реализации самого редуктора UpdateMenu
.
const UpdateMenu = (state = isMenuVisible, action) => {
switch (action.type) {
case 'UpdateMenu' :
let copystate = !state;
return copystate;
default :
return state;
}
};
Я не совсем уверен, что означают ваши действия делать, но прямо сейчас ваше состояние содержит массив элементов . Когда действие UpdateMenu
запускает , однако, этот массив заменяется значением false
. Это означает, что вы теряете все свои данные, поэтому вам, вероятно, следует проверить это.
Если вы не предотвратите это, вы столкнетесь с новой ошибкой при вызове map
, потому что ваше состояние больше не содержит массив после отправки действия UpdateMenu
. Редуктор должен вернуть новый массив с обновленными данными, чтобы все работало как положено.