У меня есть приложение, использующее реагирование, редукс и шалфей с HMR (HotModuleReplacementPlugin) для разработки.После изменения исходного файла мое приложение обновляется автоматически:
[HMR] Updated modules:
log.js?1afd:24 [HMR] - ./src/app/app.jsx
log.js?1afd:24 [HMR] - ./src/app/index.jsx
log.js?1afd:24 [HMR] App is up to date.
Но после этого я больше не могу его использовать, потому что mapStateToProps больше не вызывается.Тем не менее, я вижу, что действие было запущено, и изменение распространяется на это состояние (инструменты редуктора dev), но компоненты не получают изменения из нового состояния.
Это можно исправить, перезагрузивцелая страница с F5, но она как бы пропускает точку HMR.
import { createStore, applyMiddleware } from 'redux';
import createSagaMiddleware from 'redux-saga';
import reducer from './reducer';
import sagas from './sagas';
import { composeEnhancers } from './redux-devtools';
// create the saga middleware
const sagaMiddleware = createSagaMiddleware();
// create the store
export const store = createStore(
reducer,
composeEnhancers(applyMiddleware(
sagaMiddleware,
)),
);
// then run the saga
sagaMiddleware.run(sagas);
if (module.hot) {
module.hot.accept('./reducer', () => {
// Quite ugly: this piece of code must use AMD because it will be run in the built
// environment.
// eslint-disable-next-line
require(["./reducer"], function (nextReducer) {
store.replaceReducer(nextReducer.default);
});
});
}
export default store;
Используемые пакеты:
"Reaction-redux": "^ 6.0.1",
"redux-devtools-extension ":" ^ 2.13.8 ",
" redux-saga ":" ^ 1.0.1 ",
" реагировать ":" ^ 16.5.2 ",