reduce-reducers
работает как «объединение» редукторов:
const reducer = (state = 0, action) => {
switch (action.type) {
case 'ADD':
return state + action.value;
case 'MULTIPLE':
return state * action.value;
default:
return state;
}
};
То же самое можно записать с помощью reduce-reducers
:
const addReducer = (state = 0, action) => {
switch (action.type) {
case 'ADD':
return state + action.value;
default:
return state;
}
};
const multipleReducer = (state = 0, action) => {
switch (action.type) {
case 'MULTIPLE':
return state * action.value;
default:
return state;
}
};
const reducer = reduceReducers(addReducer, multipleReducer, 0);
Итак, для вашей задачи это означает,что вы должны переписать свои authorsReducer
и booksReducer
, чтобы в качестве первого аргумента он получил все состояние, а не только свою собственную authors
часть:
const before = (state = [], action) => {
switch (action.type) {
case `NEW_BOOK`:
return state.concat([action.book]);
default:
return state;
}
}
const now = (state = {}, action) => {
switch (action.type) {
case `NEW_BOOK`:
return {
...state,
books: state.books.concat([action.book]),
};
default:
return state;
}
}
НО! Я думаю, что этоэто не то, чего вы на самом деле хотите.
Существует еще один пакет, который делает именно то, что вам нужно Объединение секций-редукторов
Он позволяет получить доступ к корневому состоянию излюбой другой редуктор:
const before = (state = [], action) => {
switch (action.type) {
case `NEW_BOOK`:
return state.concat([action.book]);
default:
return state;
}
}
const now = (state = [], action, rootState) => {
switch (action.type) {
case `NEW_BOOK`:
return state.concat([{
...action.book,
author: rootState.authors[action.book.authorId],
}]);
default:
return state;
}
}