function inject() { if (alreadyInjected) { // TODO: This is currently true because these injections are shared between // the client and the server package. They should be built independently // and not share any injection state. Then this problem will be solved. return; } alreadyInjected = true; ReactHostComponent.injection.injectGenericComponentClass( ReactDOMComponent ); ReactHostComponent.injection.injectTextComponentClass( ReactDOMTextComponent ); ReactEmptyComponent.injection.injectEmptyComponentFactory( function(instantiate) { return new ReactDOMEmptyComponent(instantiate); } ); ReactUpdates.injection.injectReconcileTransaction( ReactReconcileTransaction ); ReactUpdates.injection.injectBatchingStrategy( ReactDefaultBatchingStrategy ); ReactComponentEnvironment.injection.injectEnvironment(ReactComponentBrowserEnvironment); }
function inject() { /** * Inject module for resolving DOM hierarchy and plugin ordering. */ EventPluginHub.injection.injectEventPluginOrder(IOSDefaultEventPluginOrder); EventPluginHub.injection.injectInstanceHandle(ReactInstanceHandles); ResponderEventPlugin.injection.injectGlobalResponderHandler( ReactNativeGlobalResponderHandler ); ResponderEventPlugin.injection.injectGlobalInteractionHandler( ReactNativeGlobalInteractionHandler ); /** * Some important event plugins included by default (without having to require * them). */ EventPluginHub.injection.injectEventPluginsByName({ 'ResponderEventPlugin': ResponderEventPlugin, 'IOSNativeBridgeEventPlugin': IOSNativeBridgeEventPlugin }); ReactUpdates.injection.injectReconcileTransaction( ReactNativeComponentEnvironment.ReactReconcileTransaction ); ReactUpdates.injection.injectBatchingStrategy( ReactDefaultBatchingStrategy ); ReactComponentEnvironment.injection.injectEnvironment( ReactNativeComponentEnvironment ); // Can't import View here because it depends on React to make its composite var RCTView = createReactNativeComponentClass({ validAttributes: {}, uiViewClassName: 'RCTView', }); ReactEmptyComponent.injection.injectEmptyComponent(RCTView); EventPluginUtils.injection.injectMount(ReactNativeMount); ReactNativeComponent.injection.injectTextComponentClass( ReactNativeTextComponent ); ReactNativeComponent.injection.injectGenericComponentClass(function(tag) { // Show a nicer error message for non-function tags var info = ''; if (typeof tag === 'string' && /^[a-z]/.test(tag)) { info += ' Each component name should start with an uppercase letter.'; } invariant(false, 'Expected a component class, got %s.%s', tag, info); }); NodeHandle.injection.injectImplementation(UniversalWorkerNodeHandle); }
function inject() { ReactGenericBatching.injection.injectStackBatchedUpdates( ReactUpdates.batchedUpdates ); ReactUpdates.injection.injectReconcileTransaction( ReactNativeComponentEnvironment.ReactReconcileTransaction ); ReactUpdates.injection.injectBatchingStrategy( ReactDefaultBatchingStrategy ); ReactComponentEnvironment.injection.injectEnvironment( ReactNativeComponentEnvironment ); var EmptyComponent = (instantiate) => { // Can't import View at the top because it depends on React to make its composite var View = require('View'); return new ReactSimpleEmptyComponent( React.createElement(View, { collapsable: true, style: { position: 'absolute' }, }), instantiate ); }; findNodeHandle.injection.injectFindNode( (instance) => instance.getHostNode() ); findNodeHandle.injection.injectFindRootNodeID( (instance) => instance._rootNodeID ); ReactEmptyComponent.injection.injectEmptyComponentFactory(EmptyComponent); ReactHostComponent.injection.injectTextComponentClass( ReactNativeTextComponent ); ReactHostComponent.injection.injectGenericComponentClass(function(tag) { // Show a nicer error message for non-function tags var info = ''; if (typeof tag === 'string' && /^[a-z]/.test(tag)) { info += ' Each component name should start with an uppercase letter.'; } invariant(false, 'Expected a component class, got %s.%s', tag, info); }); }
getHostNode(): void {} unmountComponent(): void {} } // ============================================================================= ReactUpdates.injection.injectReconcileTransaction( ReactTestReconcileTransaction ); ReactUpdates.injection.injectBatchingStrategy(ReactDefaultBatchingStrategy); ReactHostComponent.injection.injectGenericComponentClass(ReactTestComponent); ReactHostComponent.injection.injectTextComponentClass(ReactTestTextComponent); ReactEmptyComponent.injection.injectEmptyComponentFactory(function() { return new ReactTestEmptyComponent(); }); ReactComponentEnvironment.injection.injectEnvironment({ processChildrenUpdates: function() {}, replaceNodeWithMarkup: function() {}, }); var ReactTestRenderer = { create: ReactTestMount.render, /* eslint-disable camelcase */ unstable_batchedUpdates: ReactUpdates.batchedUpdates, /* eslint-enable camelcase */ }; module.exports = ReactTestRenderer;
function inject() { /** * Register the event emitter with the native bridge */ RCTEventEmitter.register(ReactNativeEventEmitter); /** * Inject module for resolving DOM hierarchy and plugin ordering. */ EventPluginHub.injection.injectEventPluginOrder(ReactNativeEventPluginOrder); EventPluginUtils.injection.injectComponentTree(ReactNativeComponentTree); EventPluginUtils.injection.injectTreeTraversal(ReactNativeTreeTraversal); ResponderEventPlugin.injection.injectGlobalResponderHandler( ReactNativeGlobalResponderHandler ); /** * Some important event plugins included by default (without having to require * them). */ EventPluginHub.injection.injectEventPluginsByName({ 'ResponderEventPlugin': ResponderEventPlugin, 'ReactNativeBridgeEventPlugin': ReactNativeBridgeEventPlugin, }); ReactUpdates.injection.injectReconcileTransaction( ReactNativeComponentEnvironment.ReactReconcileTransaction ); ReactUpdates.injection.injectBatchingStrategy( ReactDefaultBatchingStrategy ); ReactComponentEnvironment.injection.injectEnvironment( ReactNativeComponentEnvironment ); var EmptyComponent = (instantiate) => { // Can't import View at the top because it depends on React to make its composite var View = require('View'); return new ReactSimpleEmptyComponent( ReactElement.createElement(View, { collapsable: true, style: { position: 'absolute' }, }), instantiate ); }; ReactEmptyComponent.injection.injectEmptyComponentFactory(EmptyComponent); ReactHostComponent.injection.injectTextComponentClass( ReactNativeTextComponent ); ReactHostComponent.injection.injectGenericComponentClass(function(tag) { // Show a nicer error message for non-function tags var info = ''; if (typeof tag === 'string' && /^[a-z]/.test(tag)) { info += ' Each component name should start with an uppercase letter.'; } invariant(false, 'Expected a component class, got %s.%s', tag, info); }); }
var ReactUpdates = require('ReactUpdates'); var invariant = require('fbjs/lib/invariant'); ReactGenericBatching.injection.injectStackBatchedUpdates( ReactUpdates.batchedUpdates, ); ReactUpdates.injection.injectReconcileTransaction( ReactNativeComponentEnvironment.ReactReconcileTransaction, ); ReactUpdates.injection.injectBatchingStrategy(ReactDefaultBatchingStrategy); ReactComponentEnvironment.injection.injectEnvironment( ReactNativeComponentEnvironment, ); var EmptyComponent = instantiate => { // Can't import View at the top because it depends on React to make its composite var View = require('View'); return new ReactSimpleEmptyComponent( React.createElement(View, { collapsable: true, style: {position: 'absolute'}, }), instantiate, ); }; ReactEmptyComponent.injection.injectEmptyComponentFactory(EmptyComponent);