node.js - 在下一个 js 中使用 webpack5 刷新不需要的页面
问题描述
当我打开 webpack5 并在第一次渲染后从页面调用内部 api(/api/*) 时,页面刷新并记录由于服务器端更改而刷新页面数据。刷新一次后,它可以像 webpack4 一样正常工作。
预期行为 首次渲染后,页面不应在 api 调用上刷新。
解决方案
我最近更新到 Next JS 12,突然也开始遇到这个问题。我不确定这是否必然与此相关,因为我相信 Next JS 11 也将 Webpack 5 用于 HMR,但他们肯定会切换到套接字通信以进行热重载,而不是像以前版本那样使用服务器发送事件。[https://nextjs.org/docs/upgrading#nextjs-hmr-connection-now-uses-a-websocket]
我有一个文件/inc/paths.js
,我在其中组织和导出应用程序中不同资源的 URI 路径字符串变量。该模块中有许多路径也被我的部分/api
脚本使用,即 AWS S3 存储桶路径的对象键。因此,这个模块不仅被/pages
目录和其他地方的 React 组件导入,而且还被目录中的模块导入/api
。通过将/api
模块使用的所有变量移动到它们自己的文件中,并确保 React components 或 pages 没有导入这些变量,错误对我来说似乎已经消失了。
这可能与 Vercel 的这句话有关:
最后,如果您编辑由 React 树之外的文件导入的文件,Fast Refresh 将回退到完全重新加载。你可能有一个文件,它渲染了一个 React 组件,但也导出了一个由非 React 组件导入的值。例如,也许你的组件也导出了一个常量,而一个非 React 实用程序文件导入了它。在这种情况下,请考虑将常量迁移到单独的文件并将其导入到这两个文件中。这将重新启用快速刷新工作。其他情况通常可以用类似的方式解决。 https://nextjs.org/docs/basic-features/fast-refresh
虽然逻辑并不完全匹配,但它让我相信沿着这些思路发生了一些事情。
推荐阅读
- c# - 是否有从 C# 源代码生成 SyntaxFactory-Statements 的工具,用于在源生成器中生成代码
- visual-studio-code - VSCode - 如何使用自定义键绑定从快速修复弹出窗口中循环浏览项目?
- javascript - 是否有从 map() 箭头函数中删除第一个参数的语法?
- reactjs - 无法运行 ASP.net Boilerplate 的 ReactJs 项目
- typescript - 使用 Bazel + Typescript + Jest 测试覆盖率报告
- atom-editor - Atom 编辑器 UI 在文本元素周围显示波纹效果
- android - 如何解决此文件中的“(Id:user.uid)”错误?
- c# - C#从文本框vscode获取文本
- php - 通过 SFTP 迁移后,Wordpress 无法正常工作
- javascript - 为什么在第一次组件渲染中未定义 useState 对象值?