В магазине Redux нет действительного редуктора
Не удалось найти что-либо здесь относительно этой ошибки:
"Хранилище не имеет допустимого редуктора. Убедитесь, что аргумент, переданный к зеркальному компьютеру, является объектом, значения которого являются редукторами".
Мой редуктор
export default function FriendListReducer(state = {friends : []}, action) {
switch (action.type) {
case 'ADD_FRIEND':
return [
{ friends : action.payload.friend }, ...state.friends
]
default:
return state;
}
return state;
}
Сумматор
import { combineReducers } from 'redux';
import { FriendListReducer } from './FriendListReducer';
const rootReducer = combineReducers({
friends: FriendListReducer
});
export default rootReducer;
Мой магазин конфиг
import { applyMiddleware, createStore } from 'redux';
import thunkMiddleware from 'redux-thunk';
import createLogger from 'redux-logger';
import rootReducer from '../reducers/reducers';
export default function configureStore(initialState = { friends: [] }) {
const logger = createLogger({
collapsed: true,
predicate: () =>
process.env.NODE_ENV === 'development', // eslint-disable-line no-unused-vars
});
const middleware = applyMiddleware(thunkMiddleware, logger);
const store = middleware(createStore)(rootReducer, initialState);
if (module.hot) {
// Enable Webpack hot module replacement for reducers
module.hot.accept('../reducers/reducers', () => {
const nextRootReducer = require('../reducers/reducers').default;
store.replaceReducer(nextRootReducer);
});
}
return store;
}
Ответы
Ответ 1
Ваш оператор import
неверен. Либо вы используете import { Foo } from 'bar'
вместе с export Foo
, либо используйте import Foo from 'bar'
, если экспортируете с помощью export default Foo
.
Другими словами, измените либо export default function FriendListReducer
на export function FriendListReducer
, либо измените оператор импорта от import { FriendListReducer }
до import FriendListReducer
.
Ответ 2
Если объект пуст.
export default combineReducers({
})
Эта ошибка покажет.
Ответ 3
../редукторы/редукторы? это странное название
Во всяком случае, кажется, что.. /reducers/reducers не возвращают редуктор, если редукторы являются каталогами, помещают index.js внутрь, импортируют каждый редуктор и создают корневой редуктор
import FriendListReducer from "./FriendListReducer"
const rootReducer = combineReducers({
friendList : FriendListReducer
})
export default rootReducer
у вас будет state.friendList в вашем штате.
Я надеюсь, что это поможет
Ответ 4
Похоже, ваша функция редуктора верхнего уровня использует массив в качестве значения по умолчанию. Redux ожидает, что сама вершина вашего состояния будет объектом, а не массивом. Попробуйте поместить массив на определенный ключ в этом объекте, например { friendList : [] }
.
Ответ 5
Я встретил одно и то же сообщение об ошибке в немного другой ситуации. Я попытался поместить combineReducers
в combineReducers
следующим образом:
export const layoutReducer = combineReducers({
breadcrumbs: breadcrumbsReducer,
});
export const mainReducer = combineReducers({
layout: layoutReducer,
});
Поэтому я нашел решение - просто убрать использование combineReducer
из layoutReducer
и ошибка исчезла.
export const layoutReducer = {
breadcrumbs: breadcrumbsReducer,
};
export const mainReducer = combineReducers({
layout: layoutReducer,
});
Ответ 6
Please check your combine reducer file It empty......
you have forgot bind reducer here
import {combineReducers, createStore} from 'redux'
import listDataReducer from '../reducers/ListDataReducer'
const rootReducer = combineReducers({
listDataReducer, // Please add your reducer here
});
export default rootReducer;