用什么语言撰写的Facebook dispatcher.js?

时间:2016-01-08 00:15:05

标签: facebook reactjs

所有

当我学习React FLUX时,它会引导我进入Facebook Dispatcher.js: https://github.com/facebook/flux/blob/master/src/Dispatcher.js

我不太了解它的函数和类的语法,任何人都可以告诉它写什么语言吗?是ES6还是TypeScript还是别的什么?我想知道为什么它不需要被编译(或者这需要像babel这样的运行工具才能运行?)

我需要帮助解释的部分内容如下:

register(callback: (payload: TPayload) => void): DispatchToken {
    var id = _prefix + this._lastID++;
    this._callbacks[id] = callback;
    return id;
  }

或者

class Dispatcher<TPayload> {
 //...

  constructor() {
    this._callbacks = {};
    this._isDispatching = false;
    this._isHandled = {};
    this._isPending = {};
    this._lastID = 1;
  }

1 个答案:

答案 0 :(得分:3)

它是用ES2015编写的,用Babel编译。 Babel有一整节致力于learing ES2015你应该看看。上面的第一个代码使用&#34;箭头函数&#34;,这是一个保留上下文(this)的函数简写。例如。这两个是等价的:

var fn = function ( prop ) {/* ... */}.bind(this);
var fn = ( prop ) => {/* ... */};

该代码还使用了FlowType,它是JavaScript的静态类型检查器。 <TPayload>表示Dispatcher类相对于TPayloadpolymorphic。也就是说,类可以从Dispatcher扩展,但使用任何类型的有效负载,静态类型检查器将确保在整个类定义中使用相同的类型。除非您在代码中也使用FlowType,否则可以放心地忽略它。但是,实现可能如下所示:

class MyDispatcher extends Dispatcher<MyStorageType> {
  /* ... */
}

现在,静态类型检查器将确保Dispatcher使用类型TPayload的所有位置,它实际上将使用类型MyStorageType

但足够了解这些细节,因为您并不需要了解它们才能使用Facebook的Flux实用程序。通过遵循reference docstutorial,从头开始实现基本调度程序,您可以更好地了解其工作原理。

希望这有帮助!