Try/catch property deprecation warnings to support IE8
syranide committed
Feb 2, 2015 at 21:00 UTC
0a1cd56ead184554c75863a9661f26b9b94f2588
2 files changed
+18
-14
src/classic/class/ReactClass.js
+3
-1
@@ -895,8 +895,10 @@ var ReactClass = {
895
// Legacy hook
896
Constructor.type = Constructor;
897
if (__DEV__) {
898
- if (Object.defineProperty) {
898
+ try {
899
Object.defineProperty(Constructor, 'type', typeDeprecationDescriptor);
900
+ } catch (x) {
901
+ // IE will fail on defineProperty (es5-shim/sham too)
902
}
903
}
904
src/modern/class/ReactComponent.js
+15
-13
@@ -86,14 +86,14 @@ ReactComponent.prototype.forceUpdate = function(callback) {
86
* modern base class. Instead, we define a getter that warns if it's accessed.
87
*/
88
if (__DEV__) {
89
- if (Object.defineProperty) {
90
- var deprecatedAPIs = {
91
- getDOMNode: 'getDOMNode',
92
- isMounted: 'isMounted',
93
- replaceState: 'replaceState',
94
- setProps: 'setProps'
95
- };
96
- var defineDeprecationWarning = function(methodName, displayName) {
89
+ var deprecatedAPIs = {
90
+ getDOMNode: 'getDOMNode',
91
+ isMounted: 'isMounted',
92
+ replaceState: 'replaceState',
93
+ setProps: 'setProps'
94
+ };
95
+ var defineDeprecationWarning = function(methodName, displayName) {
96
+ try {
97
Object.defineProperty(ReactComponent.prototype, methodName, {
98
get: function() {
99
warning(
@@ -104,11 +104,13 @@ if (__DEV__) {
104
return undefined;
105
}
106
});
107
- };
108
- for (var methodName in deprecatedAPIs) {
109
- if (deprecatedAPIs.hasOwnProperty(methodName)) {
110
- defineDeprecationWarning(methodName, deprecatedAPIs[methodName]);
111
- }
107
+ } catch (x) {
108
+ // IE will fail on defineProperty (es5-shim/sham too)
109
+ }
110
+ };
111
+ for (var methodName in deprecatedAPIs) {
112
+ if (deprecatedAPIs.hasOwnProperty(methodName)) {
113
+ defineDeprecationWarning(methodName, deprecatedAPIs[methodName]);
114
}
115
}
116
}