Skip to content

Commit

Permalink
Merge pull request #3580 from robertknight/2402-warn-multiple-copies-…
Browse files Browse the repository at this point in the history
…of-react-on-same-page

Warn when multiple instances of React are loaded on the same page
  • Loading branch information
jimfb committed Apr 9, 2015
2 parents 50e08d4 + 8ad58ae commit f1cd867
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 5 deletions.
2 changes: 1 addition & 1 deletion grunt/tasks/version-check.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ var grunt = require('grunt');
// Check that the version we're exporting is the same one we expect in the
// package. This is not an ideal way to do this, but makes sure that we keep
// them in sync.
var reactVersionExp = /\bReact\.version\s*=\s*['"]([^'"]+)['"];/;
var reactVersionExp = /\bREACT_VERSION\s*=\s*['"]([^'"]+)['"];/;

module.exports = function() {
var reactVersion = reactVersionExp.exec(
Expand Down
29 changes: 25 additions & 4 deletions src/browser/ui/React.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,30 @@

'use strict';

var REACT_VERSION = '0.14.0-alpha';

var ExecutionEnvironment = require('ExecutionEnvironment');
var warning = require('warning');

if (__DEV__) {
// before performing any initialization of React, check that
// only one instance is in use on the current page.
//
// Using multiple instances cause a variety of problems if elements
// from different versions are mixed on the same page.
//
// See issue #2402
if (ExecutionEnvironment.canUseDOM) {
warning(
typeof window.__REACT_VERSION__ === 'undefined',
'Multiple instances of React have been initialized on the same page. ' +
'Currently initializing React v' + REACT_VERSION + ' but another instance of React v' +
window.__REACT_VERSION__ + ' was already initialized'
);
window.__REACT_VERSION__ = REACT_VERSION;
}
}

var ReactChildren = require('ReactChildren');
var ReactComponent = require('ReactComponent');
var ReactClass = require('ReactClass');
Expand All @@ -33,7 +57,6 @@ var ReactServerRendering = require('ReactServerRendering');
var assign = require('Object.assign');
var findDOMNode = require('findDOMNode');
var onlyChild = require('onlyChild');
var warning = require('warning');

ReactDefaultInjection.inject();

Expand All @@ -50,6 +73,7 @@ if (__DEV__) {
var render = ReactPerf.measure('React', 'render', ReactMount.render);

var React = {
version: REACT_VERSION,
Children: {
map: ReactChildren.map,
forEach: ReactChildren.forEach,
Expand Down Expand Up @@ -96,7 +120,6 @@ if (
}

if (__DEV__) {
var ExecutionEnvironment = require('ExecutionEnvironment');
if (ExecutionEnvironment.canUseDOM && window.top === window.self) {

// If we're in Chrome, look for the devtools marker and provide a download
Expand Down Expand Up @@ -152,6 +175,4 @@ if (__DEV__) {
}
}

React.version = '0.14.0-alpha';

module.exports = React;

0 comments on commit f1cd867

Please sign in to comment.