如果 React 提供 DOM 协调,是否可以在我编辑后 动态重新加载组件的代码并重新渲染它?
我正在寻找一种解决方案,它允许我编辑 JSX 文件、保存它并让组件在浏览器中自行更新,而无需重新加载页面、卸载它或丢失它的状态。
理想情况下,这应该在没有浏览器插件的情况下工作。
如果 React 提供 DOM 协调,是否可以在我编辑后 动态重新加载组件的代码并重新渲染它?
我正在寻找一种解决方案,它允许我编辑 JSX 文件、保存它并让组件在浏览器中自行更新,而无需重新加载页面、卸载它或丢失它的状态。
理想情况下,这应该在没有浏览器插件的情况下工作。
您可以使用react-hot-loader,这是一个插入式Webpack加载器,可以在项目中对 React 组件进行实时编辑。无需浏览器插件或 IDE 挂钩。
它将 Webpack热模块替换(HMR) 与 React 结合在一起。
如果出现以下情况,您可以使用它:
这个怎么运作:
React.createClass
调用更改为存储组件原型的特殊函数createClass
和updateClass
函数,然后用新版本更新它;forceUpdate
重新渲染组件。有一个演示视频、一个解释性博客文章和一个配置了实时编辑的 React 教程应用程序分支。
这都是香草JS。
你可以,我创建了一个示例项目,演示如何使用 ES5 和 RequireJS 为自己创建这些设施——它适用于 React 和 Backbone——它可能适用于 Angular 和 Ember 等,只要你使用 AMD 模块和 RequireJS .
以下是所有信息: https ://medium.com/@the1mills/hot-reloading-with-react-requirejs-7b2aa6cb06e1
基本步骤是:
gulp.js 观察者监听文件系统的变化
gulpfile 中的 socket.io 服务器向所有浏览器客户端发送一条消息,其中包含已更改文件的路径
客户端删除代表该文件/模块的缓存,并重新需要它(使用 AJAX 从服务器文件系统中提取它)
前端应用程序被配置/设计为重新评估对它希望热重载的模块的所有引用,在这种情况下,只有 JS 视图、模板和 CSS 可用于热重载 - 路由器、控制器、数据存储不可用尚未配置。我确实怀疑所有文件都可以热重新加载,唯一的例外是数据存储。
你可以在这里看到一个示例项目: https ://github.com/ORESoftware/hr4R
但我建议先阅读上面的文章。
与使用 Babel/ES6 和 React-Hot-Loader 相比,这是一个更简单的 DIY 热重载实现。
Webpack 主要不是为热重载而设计的——如果是这样的话,热重载将不再是一个实验性的特性,也不会使用轮询来查看文件系统差异,这是它目前所做的(参见我的文章)。
如果您考虑一下,RequireJS / AMD 规范基本上是为热重载而制定的。