вроде, корректно обрабатывает (выдаёт обновленный чанк), и браузер это обновление видит и забирает, но оно не применяется к текущей странице (т.е. обновления не видно).
В консоле всё, вроде, чисто, никаких ошибок нет:
[WDS] App updated. Recompiling...
[WDS] App hot update...
[HMR] Checking for updates on the server...
[HMR] Updated modules:
[HMR] - ./ClientApp/Root.tsx
[HMR] App is up to date.
При сохранении сигналинг по вебсокету проходит:
ws://localhost:3000/sockjs-node
Чанк с апдейтом успешно поступает, содержит внесённые обновления, и забирается браузером
/dist/App.xxx.hot-update.js
Но обновления компонента не происходит.
Никто не сталкивался?...
Решение нашёл — может, кому пригодится. Используется набор из TypeScript, к нему лоадер babel-loader с плагином react-hot-loader/babel, реактовский HМR react-hot-loader и вебпаковский дев-сервер (webpack serve) Все нужные для реализации HMR действия проходят как бы успешно (без видимых проблем): сигналинг о апдейтах по вебсокету, генерация чанков с изменениями, их пуш через сокет, реакция на эти пуши клиентом (браузером) и тд. Но, с..а, обновления (перерисовки) компонента на форме (в браузере) не происходит, — хоть ты тресни. Проблема была в том, что компонент ("на классах") наследовался от React.PureComponent. И именно в таком режиме HMR отрабатывает как бы по-полной, но ничего не перерисовывает (т.е. основную задачу не выполняет). Если же компонент унаследовать от React.Component, или компонент делать не на классах, а функциональным, то всё идеально работает.
А если функциональный компонент обернуть в React.memo ? Если я правильно понял то, что у вас описано как "проблема" - вы столкнетесь ровно с тем же поведением.
Обсуждают сегодня