首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用craco的React-hot-loader

使用craco的React-hot-loader
EN

Stack Overflow用户
提问于 2020-05-04 18:28:13
回答 1查看 1.7K关注 0票数 0

我一直在尝试让react- have在我的项目中工作,并根据package readme中的说明进行了设置。主要的区别是我在这个项目中使用了craco,所以步骤1意味着我已经添加了

代码语言:javascript
复制
    babel: {
      plugins: ["react-hot-loader/babel"],
    },

到我的craco.config.js

我的根组件被标记为热导出:

代码语言:javascript
复制
// ...
import { hot } from 'react-hot-loader/root';
// ...

function App() {
  return (
    <div>
      <Suspense fallback={loadingFB()}>
        <Provider store={userStore}>
          <ProvideAuth>
            <Router />
          </ProvideAuth>
        </Provider>
      </Suspense>
    </div>
  );
}

export default hot(App);

我的index.js中有import 'react-hot-loader'; first

最后,我使用以下yarn命令安装了@hot-loader/react-domyarn add react-dom@npm:@hot-loader/react-dom

我目前在编译或浏览器控制台中没有收到任何警告/错误。但是,当我刷新页面或手动尝试通过写入url转到任何子页面时,我会丢失所有状态。

有人知道丢了什么吗?

EN

回答 1

Stack Overflow用户

发布于 2020-06-16 16:50:35

你还需要devDependencies上的craco-plugin-react-hot-reload和更多的插件,解析craco.config.js上的配置,这里是我的。

代码语言:javascript
复制
const TerserPlugin = require('terser-webpack-plugin')
const reactHotReloadPlugin = require('craco-plugin-react-hot-reload')

module.exports = {
    plugins: [{
        plugin: reactHotReloadPlugin
    }],
    eslint: {
        enable: true
    },
    babel: {
        presets: [],
        plugins: [
            ["@babel/plugin-proposal-decorators", { "legacy": true }],
            ["@babel/plugin-proposal-class-properties", { "loose": true }],
            ["babel-plugin-styled-components", { "displayName": true }]
        ],
        loaderOptions: {},
        loaderOptions: (babelLoaderOptions, { env, paths }) => { return babelLoaderOptions; }
    },
    webpack: {
        configure: webpackConfig => ({
            ...webpackConfig,
            resolve: {
                alias: {
                    'react-dom': '@hot-loader/react-dom'
                }
            },
            optimization: {
                ...webpackConfig.optimization, 
                minimize: false,
                minimizer: [
                    new TerserPlugin({
                        terserOptions: {
                            parse: {
                                ecma: 8,
                            },
                            compress: {
                                ecma: 5,
                                warnings: false,
                                comparisons: false,
                                inline: 2,
                                drop_console: false,
                            },
                            mangle: {
                                safari10: true,
                            },
                            output: {
                                ecma: 5,
                                comments: false,
                                ascii_only: true,
                            },
                        },
                        parallel: 2,
                        cache: false,
                        sourceMap: true,
                        extractComments: false,
                    }),
                ],
            },
        }),
    },
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61590086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档