У меня есть следующее в моем index.jsx
:
const store = configureStore();
const MOUNT_NODE = document.getElementById('root');
const render = () => {
ReactDOM.render(
<Provider store={store}>
<Routes />
</Provider>,
MOUNT_NODE,
);
};
if (module.hot) {
module.hot.accept('routes.jsx', () => {
ReactDOM.unmountComponentAtNode(MOUNT_NODE);
render();
});
}
render();
Это делает начальное приложение.Теперь, когда я изменяю любой файл, я получаю следующий журнал в консоли браузера:
[HMR] bundle rebuilding
[HMR] bundle rebuilt in 285ms
[HMR] Checking for updates on the server...
[HMR] Updated modules:
[HMR] - ./src/js/components/SomeComponent/SomeComponent.jsx
[HMR] - ./src/js/components/App.jsx
[HMR] - ./src/js/routes.jsx
[HMR] App is up to date.
Этот журнал предполагает, что обновление было обнаружено и что модули были обновлены.Кроме того, я вижу на вкладке «сеть», что загружен новый скрипт, и мигает тег <head>
, показывая, что он загрузил новый скрипт.Я проверил скрипт, и он содержит мои изменения.
Пока я не вижу обновления моей страницы.Вся страница быстро мигает, показывая, что вызывается функция render()
, но изменений нет.
Я использую большую часть настроек HMR и веб-пакета с https://github.com/react-boilerplate/react-boilerplate.
Я озадачен тем, где искать, чтобы узнать, что случилось.Любая помощь приветствуется.
РЕДАКТИРОВАТЬ:
Я только что обнаружил, что module.hot.accept()
вызывается только один раз, для первого обновления.Он не вызывается во второй раз, когда я изменяю файлы.
РЕДАКТИРОВАТЬ 2:
Когда я пытаюсь использовать module.hot.accept (() => {}), кажется,работать, но тогда редукторы не работают, и я получаю эту ошибку:
Поставщик не поддерживает изменение store
на лету.Скорее всего, вы видите эту ошибку, потому что вы обновили Redux 2.x и React Redux 2.x, которые больше не поддерживают горячие перезагрузки.См. https://github.com/reactjs/react-redux/releases/tag/v2.0.0 для инструкций по миграции.
Итак, единственный способ что-либо сделать с этим, это иметь два module.hot.accept
s один с App.jsx
, а другой с reducers.jsx
.Все еще не повезло выяснить, что именно не так.