在没有 NodeJs EventEmitter 的情况下构建 Flux/React 应用程序

Building Flux/React application without NodeJs EventEmitter

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

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

我遇到的问题是我无法访问 EventEmitter 库,据我所知这是一个 Nodejs 库?我可以使用替代方案吗?

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

首先是一些代码:

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

然后你 运行 browserify 就可以了:

browserify index.js > bundle.js

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

好吧,如果您正在使用 Facebook (https://github.com/facebook/flux) 提供的 flux 实现,您实际上可以 扩展他们的 FluxStore class,它带有一个构建在事件发射器中。

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

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

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

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

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

    __onDispatch(payload) {
       //your code
    }
}