如何移植遗留代码

如何移植遗留代码

原文:https://medium.com/hackernoon/how-to-graft-react-on-to-legacy-code-3ad86e55e2f1

有很多活的项目是使用旧的 web 技术栈构建的。从头开始通常是不可能的,升级代码库可能是一项艰巨的任务,尤其是在没有单元测试或合适的构建工具的情况下。本文讨论并演示了一个简单的工作演示,通过使用 Redux 和 Ducks++ 模式,将 Backbone/jQuery 应用程序与 React 集成。如果你没有听说过 Ducks,它基本上是一个简单的设计模式,用于模块化你的 Redux 代码。

该应用程序

CodePen 可以找到一个现场工作演示,整个项目也可以在 GitHub 上找到。app 演示了两个开关:一个是用 Backbone/jQuery 实现的,一个是用 React 实现的;然而,两者都是通过主干模型和 Redux 存储同步的。React 代码被打包并放入到传统的应用程序中——实际上,它是一个可以立即调用的函数表达式,行为就像一个库。

反应模块

遗留应用程序仍然处于主导地位,负责构建和安装 React 代码:

var reactToggleApp = window.reactModule.make(
  { 
    el: document.getElementById('react-module') 
  }
);reactToggleApp.render();

React 代码可通过一个工厂函数获得,该函数是全局可用的。这允许我们传入必要的回调和选项,例如错误处理机制或翻译功能。React 模块还需要一个 DOM 元素来挂载。运行工厂函数后,将返回一个具有以下接口的对象:

{
  render,
  destroy,
  store,
  ducks
}

渲染和销毁允许父应用程序启动和删除 react 应用程序。Redux 存储和 ducks 模块是实现两个世界同步的关键。

这座桥

工厂函数公开了 Redux 存储,这允许我们订阅存储中的任何更改,并将这些更改传播到主干模型。类似地,对主干模型的更改可以通过分派适当的动作传播到 Redux 存储。实现这一点的诀窍是遵循 Ducks++模式,该模式将动作和选择器捆绑在一起。注意在下面的代码中,我们使用actionCreatorsselectors将主干模型的属性on同步到keyValues鸭子的属性toggle

model.on('change:on', function (model, value) {
  window.reactModule.store.dispatch(
    window.reactModule.ducks.keyValues.actionCreators.setValue(
      'toggle', value
  ));
});window.reactModule.store.subscribe(function() {
  var state = window.reactModule.store.getState();
  var value = window.reactModule.ducks.keyValues.selectors.getValue(
    state, 'toggle'); model.set('on', value);
});

我们现在有能力用 react 模块替换遗留组件,并最终替换所有遗留代码。

结论

考虑到我们正在将一个全新的代码库合并到一个遗留系统中,这种方法出人意料地直接。我们甚至可以在一个单独的存储库中实现 React 代码,并像对待一个绿地项目一样对待它——面对现实吧,谁不想在绿地上工作呢!?

请记住,如果您想尝试本文中的代码,请随意克隆/派生我的 repo

如果你觉得这篇文章有用/鼓舞人心 点击 💚这样其他人也可以享受。

感谢您的宝贵时间!关注我的TwitterLinkedIn

黑客中午是黑客如何开始他们的下午。我们是阿美族家庭的一员。我们现在接受投稿并乐意讨论广告&赞助机会。

如果你喜欢这个故事,我们推荐你阅读我们的最新科技故事趋势科技故事。直到下一次,不要把世界的现实想当然!


本站为非盈利网站,作品由网友提供上传,如无意中有侵犯您的版权,请联系删除