Как можно иметь как preloadedState (гидратирующийся с сервера), так и динамически вводить редукторы?
In react-boilerplate
или Как динамически загружать редукторы для разделения кода в приложении Redux? существует концепция редукторов, которые добавляются динамически в зависимости от просматриваемой страницы / компонентов.Извлечение из reducers.js
:
export default function createReducer(asyncReducers) {
return combineReducers({
users,
posts,
...asyncReducers
});
}
Хотя это хорошо работает при переходе от одной страницы к другой (или только в клиентском приложении);при гидратации данных с сервера я сталкиваюсь с этой ошибкой:
Unexpected property "comments" found in previous state received by the reducer. Expected to find one of the known reducer property names instead: "users", "posts". Unexpected properties will be ignored.
(где comments
- имя свойства динамически впрыскиваемого редуктора)
Причинаэта ошибка очевидна, поскольку preloadedState
, поступающий с сервера (использующий React SSR), уже содержит comments
, а первоначальный редуктор - нет, поскольку впоследствии он добавляется динамически.Ошибка исчезнет, если я добавлю comments
к своему combineReducers
;однако это означает, что при инициализации приложения мне нужно включить все редукторы;что не идеально.