【问题标题】:Building Flux/React application without NodeJs EventEmitter在没有 NodeJs EventEmitter 的情况下构建 Flux/React 应用程序
【发布时间】:2015-07-15 19:00:40
【问题描述】:

您好,我正在尝试构建一个带有 go-lang 后端的 Flux/React 应用程序。我一直在关注我找到的教程here。但是我在建立商店时遇到了问题。在本教程中,类似这样的内容用于为商店创建基础。

var ProductStore = _.extend({}, EventEmitter.prototype, {...});

我的问题是我无法访问 EventEmitter 库,我理解它是 Nodejs 库?我可以使用其他替代方法吗?

【问题讨论】:

  • 您还可以查看第三方库,例如 EventEmitter2 或任何其他 pub-sub 样式库。

标签: javascript node.js go reactjs flux


【解决方案1】:

如果您使用 Facebook (https://github.com/facebook/flux) 提供的通量实现,您实际上可以扩展他们的 FluxStore 类,该类带有内置的 eventEmitter。

如果你想这样做,唯一的事情就是你必须使用 es6 类(并使用 babel 转译为 es5)。

它的好处是您不必实现 addListener removeListeneremitChange 方法,这非常 DRY :)

有了这个解决方案,你的商店最终会变成这样:

var FluxStore = require("flux/utils").Store,
    thing;

class ThingStore extends FluxStore {
    getThing() { 
        return thing;
    }

    __onDispatch(payload) {
       //your code
    }
}

【讨论】:

    【解决方案2】:

    您可以在浏览器中使用 NodeJS 库!看看browserify

    首先是一些代码:

    // index.js
    var EventEmitter = require("events").EventEmitter;
    var ProductStore = function() {};
    ProductStore.prototype = new EventEmitter;
    

    然后你在上面运行 browserify:

    browserify index.js > bundle.js
    

    同样值得一看的是WebPack,它做同样的事情。 (但有一些附加功能)

    【讨论】:

    • browserify 会和requirejs 很好地集成吗?我需要节点来使用browserify吗?感谢您的帮助。
    • @PabloKarlsson 不,browserify 不与 requirejs 集成。它们是两个不同的模块系统,设计不同。如果你想在 npm 包中使用 requirejs,我建议你看看 Webpack。
    • @Caleb 你更喜欢 requirejs 还是 browserify?
    • 你确实需要节点。我倾向于手动包含脚本(尽管我也使用过 brunch 或 gulp)。您可以使用 browserify 生成您需要的 lib 包,然后像常规文件一样包含它。请参阅此处的“独立”选项:github.com/substack/node-browserify#usage。使用这种方法,您只需要一次节点,之后它就是常规的 javascript。
    • 我最终使用了 eventemitter2。
    猜你喜欢
    • 1970-01-01
    • 2021-07-22
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    • 2013-09-15
    • 2017-05-08
    • 1970-01-01
    • 2018-01-06
    相关资源
    最近更新 更多