From 1aabd537d8809cd0eb5dac69f78cad826a209059 Mon Sep 17 00:00:00 2001 From: Feross Aboukhadijeh Date: Thu, 26 May 2016 18:12:23 -0700 Subject: [PATCH] cleanup dispatcher --- renderer/lib/dispatcher.js | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/renderer/lib/dispatcher.js b/renderer/lib/dispatcher.js index 98d590a3..eba84df7 100644 --- a/renderer/lib/dispatcher.js +++ b/renderer/lib/dispatcher.js @@ -1,41 +1,39 @@ module.exports = { - setDispatch, dispatch, - dispatcher + dispatcher, + setDispatch } -// Memoize most of our event handlers, which are functions in the form -// () => dispatch() -// ... this prevents virtual-dom from updating every listener on every update() -var _dispatchers = {} - -var _dispatch = () => {} +var dispatchers = {} +var _dispatch = function () {} function setDispatch (dispatch) { _dispatch = dispatch } -// Get a _memoized event handler that calls dispatch() -// All args must be JSON-able +function dispatch (...args) { + _dispatch(...args) +} + +// Most DOM event handlers are trivial functions like `() => dispatch()`. +// For these, `dispatcher()` is preferred because it memoizes the handler +// function. This prevents virtual-dom from updating the listener functions on +// each update(). function dispatcher (...args) { var str = JSON.stringify(args) - var handler = _dispatchers[str] + var handler = dispatchers[str] if (!handler) { - handler = _dispatchers[str] = function (e) { + handler = dispatchers[str] = function (e) { // Do not propagate click to elements below the button e.stopPropagation() if (e.currentTarget.classList.contains('disabled')) { - // Do not allow clicks on disabled buttons + // Ignore clicks on disabled elements return } - _dispatch.apply(null, args) + dispatch(...args) } } return handler } - -function dispatch (...args) { - _dispatch.apply(null, args) -}