From 0b5ad13fefac895bae9db53825abe0d2560ca450 Mon Sep 17 00:00:00 2001 From: Glenn Murray Date: Fri, 24 Jan 2014 12:07:28 +1100 Subject: [PATCH] Flag to prevent registration of events #954 Flag on EventPluginHub to disable event registration. For the purposes of server side rendering not registering events. Could be cleaner if used a transaction with an optional step. Alternatively could be an ExecutionEnvironment variable. Could also be flag passed to mount component, however non DOM components have no comprehension of events. --- src/environment/ReactServerRendering.js | 5 +++++ src/event/EventPluginHub.js | 21 ++++++++++++++++++--- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/environment/ReactServerRendering.js b/src/environment/ReactServerRendering.js index e5046edbeb783..15a191d983a06 100644 --- a/src/environment/ReactServerRendering.js +++ b/src/environment/ReactServerRendering.js @@ -22,6 +22,8 @@ var ReactComponent = require('ReactComponent'); var ReactInstanceHandles = require('ReactInstanceHandles'); var ReactMarkupChecksum = require('ReactMarkupChecksum'); var ReactReconcileTransaction = require('ReactReconcileTransaction'); +var ExecutionEnvironment = require('ExecutionEnvironment'); +var EventPluginHub = require('EventPluginHub'); var invariant = require('invariant'); @@ -48,7 +50,10 @@ function renderComponentToString(component, callback) { transaction.reinitializeTransaction(); try { transaction.perform(function() { + var registrationEnabled = EventPluginHub.isRegistrationEnabled(); + EventPluginHub.setRegistrationEnabled(false); var markup = component.mountComponent(id, transaction, 0); + EventPluginHub.setRegistrationEnabled(registrationEnabled); markup = ReactMarkupChecksum.addChecksumToMarkup(markup); callback(markup); }, null); diff --git a/src/event/EventPluginHub.js b/src/event/EventPluginHub.js index d42f3050e6f77..51e8e9e53025a 100644 --- a/src/event/EventPluginHub.js +++ b/src/event/EventPluginHub.js @@ -31,6 +31,11 @@ var isEventSupported = require('isEventSupported'); */ var listenerBank = {}; +/** + * Allow disabling listener registration + */ +var registrationEnabled = true; + /** * Internal queue of events that have accumulated their dispatches and are * waiting to have their dispatches executed. @@ -98,6 +103,14 @@ function validateInstanceHandle() { */ var EventPluginHub = { + setRegistrationEnabled: function(enabled) { + registrationEnabled = enabled; + }, + + isRegistrationEnabled: function() { + return registrationEnabled; + }, + /** * Methods for injecting dependencies. */ @@ -158,9 +171,11 @@ var EventPluginHub = { console.warn('This browser doesn\'t support the `onScroll` event'); } } - var bankForRegistrationName = - listenerBank[registrationName] || (listenerBank[registrationName] = {}); - bankForRegistrationName[id] = listener; + if(registrationEnabled) { + var bankForRegistrationName = + listenerBank[registrationName] || (listenerBank[registrationName] = {}); + bankForRegistrationName[id] = listener; + } }, /**