Вот моя установка:
const DesktopApp = lazy(() => import(/* webpackChunkName: "DesktopApp" */'./DesktopApp'));
const MobileApp = lazy(() => import(/* webpackChunkName: "MobileApp" */'./MobileApp'));
type Props = { shouldServeMobile: boolean };
export const App = ({ shouldServeMobile }: Props): JSX.Element => (
shouldServeMobile
? (
<Suspense fallback={<AppLoading />}>
<MobileApp />
</Suspense>
) : (
<Suspense fallback={<AppLoading />}>
{/* GlobalDesktopStyle is injected in multiple places due to a bug where the
theme gets reset when lazy loading via React.Lazy + webpack */}
<GlobalDesktopStyle />
<DesktopApp />
</Suspense>
)
);
Это загружается webpack-dev-server
со следующей конфигурацией:
devServer: {
contentBase: paths.output.path,
// this host value allows devices on a LAN to connect to the dev server
host: '0.0.0.0',
https: true,
port: 9001,
hotOnly: true,
// lets any URL work
historyApiFallback: true,
},
plugins: [
new webpack.HotModuleReplacementPlugin()
]
Теперь представьте, что мы визуализируем
import { hot } from 'react-hot-loader/root';
// some imports omitted
const HotApp = hot(App);
ReactDOM.render(
<HotApp shouldServeMobile={true} />,
document.getElementById('root')
);
При начальной загрузке это работает правильно. Кусок MobileApp
скачивается, а DesktopApp
нет. Однако, как только я изменяю какие-либо данные в своих компонентах и срабатывает HMR
, перезагрузка загружает фрагмент DesktopApp
.
Это явно противоречит цели разделения кода. Кто-нибудь знает, как предотвратить это?
Чтобы было ясно: я вывел console.log(shouldServeMobile)
, и это всегда true
. Кроме того, я попробовал предложение здесь: все куски после каждого изменения и это совсем не помогло.
react-hot-loader/root
вместо этого просто используйте webpackhot
reloader. ? - person Sakhi Mansoor   schedule 11.11.2019