@samitouri / QOS-React-2 / commits / fbf81a8435

Remove setProps and replaceProps.

jim committed Nov 30, 2015 at 11:46 UTC fbf81a84358ab2decf900f7fcc632defaf0df736
8 files changed +20 -214
src/isomorphic/classic/class/ReactClass.js
-50
@@ -54,18 +54,6 @@ var SpecPolicy = keyMirror({
54
55 var injectedMixins = [];
56
57 -var warnedSetProps = false;
58 -function warnSetProps() {
59 - if (!warnedSetProps) {
60 - warnedSetProps = true;
61 - warning(
62 - false,
63 - 'setProps(...) and replaceProps(...) are deprecated. ' +
64 - 'Instead, call render again at the top level.'
65 - );
66 - }
67 -}
68 -
57 /**
58 * Composite components are higher-level components that compose other composite
59 * or native components.
@@ -737,44 +725,6 @@ var ReactClassMixin = {
725 isMounted: function() {
726 return this.updater.isMounted(this);
727 },
740 -
741 - /**
742 - * Sets a subset of the props.
743 - *
744 - * @param {object} partialProps Subset of the next props.
745 - * @param {?function} callback Called after props are updated.
746 - * @final
747 - * @public
748 - * @deprecated
749 - */
750 - setProps: function(partialProps, callback) {
751 - if (__DEV__) {
752 - warnSetProps();
753 - }
754 - this.updater.enqueueSetProps(this, partialProps);
755 - if (callback) {
756 - this.updater.enqueueCallback(this, callback);
757 - }
758 - },
759 -
760 - /**
761 - * Replace all the props.
762 - *
763 - * @param {object} newProps Subset of the next props.
764 - * @param {?function} callback Called after props are updated.
765 - * @final
766 - * @public
767 - * @deprecated
768 - */
769 - replaceProps: function(newProps, callback) {
770 - if (__DEV__) {
771 - warnSetProps();
772 - }
773 - this.updater.enqueueReplaceProps(this, newProps);
774 - if (callback) {
775 - this.updater.enqueueCallback(this, callback);
776 - }
777 - },
728 };
729
730 var ReactClassComponent = function() {};
src/isomorphic/modern/class/ReactComponent.js
-8
@@ -115,19 +115,11 @@ if (__DEV__) {
115 'Instead, make sure to clean up subscriptions and pending requests in ' +
116 'componentWillUnmount to prevent memory leaks.',
117 ],
118 - replaceProps: [
119 - 'replaceProps',
120 - 'Instead, call render again at the top level.',
121 - ],
118 replaceState: [
119 'replaceState',
120 'Refactor your code to use setState instead (see ' +
121 'https://github.com/facebook/react/issues/3236).',
122 ],
127 - setProps: [
128 - 'setProps',
129 - 'Instead, call render again at the top level.',
130 - ],
123 };
124 var defineDeprecationWarning = function(methodName, info) {
125 if (canDefineProperty) {
src/isomorphic/modern/class/ReactNoopUpdateQueue.js
-23
@@ -98,29 +98,6 @@ var ReactNoopUpdateQueue = {
98 enqueueSetState: function(publicInstance, partialState) {
99 warnTDZ(publicInstance, 'setState');
100 },
101 -
102 - /**
103 - * Sets a subset of the props.
104 - *
105 - * @param {ReactClass} publicInstance The instance that should rerender.
106 - * @param {object} partialProps Subset of the next props.
107 - * @internal
108 - */
109 - enqueueSetProps: function(publicInstance, partialProps) {
110 - warnTDZ(publicInstance, 'setProps');
111 - },
112 -
113 - /**
114 - * Replaces all of the props.
115 - *
116 - * @param {ReactClass} publicInstance The instance that should rerender.
117 - * @param {object} props New props.
118 - * @internal
119 - */
120 - enqueueReplaceProps: function(publicInstance, props) {
121 - warnTDZ(publicInstance, 'replaceProps');
122 - },
123 -
101 };
102
103 module.exports = ReactNoopUpdateQueue;
src/isomorphic/modern/class/__tests__/ReactCoffeeScriptClass-test.coffee
+1 -7
@@ -350,7 +350,7 @@ describe 'ReactCoffeeScriptClass', ->
350 expect(-> instance.isMounted()).toThrow()
351 expect(-> instance.setProps name: 'bar').toThrow()
352 expect(-> instance.replaceProps name: 'bar').toThrow()
353 - expect(console.error.calls.length).toBe 5
353 + expect(console.error.calls.length).toBe 3
354 expect(console.error.argsForCall[0][0]).toContain(
355 'getDOMNode(...) is deprecated in plain JavaScript React classes'
356 )
@@ -360,12 +360,6 @@ describe 'ReactCoffeeScriptClass', ->
360 expect(console.error.argsForCall[2][0]).toContain(
361 'isMounted(...) is deprecated in plain JavaScript React classes'
362 )
363 - expect(console.error.argsForCall[3][0]).toContain(
364 - 'setProps(...) is deprecated in plain JavaScript React classes'
365 - )
366 - expect(console.error.argsForCall[4][0]).toContain(
367 - 'replaceProps(...) is deprecated in plain JavaScript React classes'
368 - )
363
364 it 'supports this.context passed via getChildContext', ->
365 class Bar extends React.Component
src/isomorphic/modern/class/__tests__/ReactES6Class-test.js
+1 -7
@@ -407,7 +407,7 @@ describe('ReactES6Class', function() {
407 expect(() => instance.isMounted()).toThrow();
408 expect(() => instance.setProps({name: 'bar'})).toThrow();
409 expect(() => instance.replaceProps({name: 'bar'})).toThrow();
410 - expect(console.error.calls.length).toBe(5);
410 + expect(console.error.calls.length).toBe(3);
411 expect(console.error.argsForCall[0][0]).toContain(
412 'getDOMNode(...) is deprecated in plain JavaScript React classes. ' +
413 'Use ReactDOM.findDOMNode(component) instead.'
@@ -418,12 +418,6 @@ describe('ReactES6Class', function() {
418 expect(console.error.argsForCall[2][0]).toContain(
419 'isMounted(...) is deprecated in plain JavaScript React classes'
420 );
421 - expect(console.error.argsForCall[3][0]).toContain(
422 - 'setProps(...) is deprecated in plain JavaScript React classes'
423 - );
424 - expect(console.error.argsForCall[4][0]).toContain(
425 - 'replaceProps(...) is deprecated in plain JavaScript React classes'
426 - );
421 });
422
423 it('supports this.context passed via getChildContext', function() {
src/isomorphic/modern/class/__tests__/ReactTypeScriptClass-test.ts
+1 -7
@@ -491,7 +491,7 @@ describe('ReactTypeScriptClass', function() {
491 expect(() => instance.isMounted()).toThrow();
492 expect(() => instance.setProps({ name: 'bar' })).toThrow();
493 expect(() => instance.replaceProps({ name: 'bar' })).toThrow();
494 - expect((<any>console.error).argsForCall.length).toBe(5);
494 + expect((<any>console.error).argsForCall.length).toBe(3);
495 expect((<any>console.error).argsForCall[0][0]).toContain(
496 'getDOMNode(...) is deprecated in plain JavaScript React classes'
497 );
@@ -501,12 +501,6 @@ describe('ReactTypeScriptClass', function() {
501 expect((<any>console.error).argsForCall[2][0]).toContain(
502 'isMounted(...) is deprecated in plain JavaScript React classes'
503 );
504 - expect((<any>console.error).argsForCall[3][0]).toContain(
505 - 'setProps(...) is deprecated in plain JavaScript React classes'
506 - );
507 - expect((<any>console.error).argsForCall[4][0]).toContain(
508 - 'replaceProps(...) is deprecated in plain JavaScript React classes'
509 - );
504 });
505
506 it('supports this.context passed via getChildContext', function() {
src/renderers/shared/reconciler/__tests__/ReactComponentLifeCycle-test.js
-41
@@ -444,47 +444,6 @@ describe('ReactComponentLifeCycle', function() {
444 expect(instance.state).toEqual(POST_WILL_UNMOUNT_STATE);
445 });
446
447 - it('should throw when calling setProps() on an owned component', function() {
448 - /**
449 - * calls setProps in an componentDidMount.
450 - */
451 - var Inner = React.createClass({
452 - render: function() {
453 - return <div />;
454 - },
455 - });
456 - var PropsUpdaterInOnDOMReady = React.createClass({
457 - componentDidMount: function() {
458 - this.refs.theSimpleComponent.setProps({
459 - className: this.props.valueToUseInOnDOMReady,
460 - });
461 - },
462 - render: function() {
463 - return (
464 - <Inner
465 - className={this.props.valueToUseInitially}
466 - ref="theSimpleComponent"
467 - />
468 - );
469 - },
470 - });
471 - var instance =
472 - <PropsUpdaterInOnDOMReady
473 - valueToUseInitially="hello"
474 - valueToUseInOnDOMReady="goodbye"
475 - />;
476 - spyOn(console, 'error');
477 - expect(function() {
478 - instance = ReactTestUtils.renderIntoDocument(instance);
479 - }).toThrow(
480 - 'setProps(...): You called `setProps` on a component with a parent. ' +
481 - 'This is an anti-pattern since props will get reactively updated ' +
482 - 'when rendered. Instead, change the owner\'s `render` method to pass ' +
483 - 'the correct value as props to the component where it is created.'
484 - );
485 - expect(console.error.calls.length).toBe(1); // setProps deprecated
486 - });
487 -
447 it('should not throw when updating an auxiliary component', function() {
448 var Tooltip = React.createClass({
449 render: function() {
src/renderers/shared/reconciler/__tests__/ReactCompositeComponent-test.js
+17 -71
@@ -137,12 +137,23 @@ describe('ReactCompositeComponent', function() {
137 });
138
139 it('should not cache old DOM nodes when switching constructors', function() {
140 - var instance = <ChildUpdates renderAnchor={true} anchorClassOn={false}/>;
141 - instance = ReactTestUtils.renderIntoDocument(instance);
142 - instance.setProps({anchorClassOn: true}); // Warm any cache
143 - instance.setProps({renderAnchor: false}); // Clear out the anchor
144 - // rerender
145 - instance.setProps({renderAnchor: true, anchorClassOn: false});
140 + var container = document.createElement('div');
141 + var instance = ReactDOM.render(
142 + <ChildUpdates renderAnchor={true} anchorClassOn={false}/>,
143 + container
144 + );
145 + ReactDOM.render( // Warm any cache
146 + <ChildUpdates renderAnchor={true} anchorClassOn={true}/>,
147 + container
148 + );
149 + ReactDOM.render( // Clear out the anchor
150 + <ChildUpdates renderAnchor={false} anchorClassOn={true}/>,
151 + container
152 + );
153 + ReactDOM.render( // rerender
154 + <ChildUpdates renderAnchor={true} anchorClassOn={false}/>,
155 + container
156 + );
157 expect(instance.getAnchor().className).toBe('');
158 });
159
@@ -398,71 +409,6 @@ describe('ReactCompositeComponent', function() {
409 expect(instance2.state.value).toBe(1);
410 });
411
401 - it('should not allow `setProps` on unmounted components', function() {
402 - var container = document.createElement('div');
403 - document.body.appendChild(container);
404 -
405 - var Component = React.createClass({
406 - render: function() {
407 - return <div />;
408 - },
409 - });
410 -
411 - var instance = <Component />;
412 - expect(instance.setProps).not.toBeDefined();
413 -
414 - instance = ReactDOM.render(instance, container);
415 - expect(function() {
416 - instance.setProps({value: 1});
417 - }).not.toThrow();
418 - expect(console.error.calls.length).toBe(1); // setProps deprecated
419 -
420 - ReactDOM.unmountComponentAtNode(container);
421 - expect(function() {
422 - instance.setProps({value: 2});
423 - }).not.toThrow();
424 -
425 - expect(console.error.calls.length).toBe(2);
426 - expect(console.error.argsForCall[1][0]).toBe(
427 - 'Warning: setProps(...): Can only update a mounted or ' +
428 - 'mounting component. This usually means you called setProps() on an ' +
429 - 'unmounted component. This is a no-op. Please check the code for the ' +
430 - 'Component component.'
431 - );
432 - });
433 -
434 - it('should only allow `setProps` on top-level components', function() {
435 - var container = document.createElement('div');
436 - document.body.appendChild(container);
437 -
438 - var innerInstance;
439 -
440 - var Inner = React.createClass({
441 - render: function() {
442 - return <div />;
443 - },
444 - });
445 - var Component = React.createClass({
446 - render: function() {
447 - return <div><Inner ref="inner" /></div>;
448 - },
449 - componentDidMount: function() {
450 - innerInstance = this.refs.inner;
451 - },
452 - });
453 - ReactDOM.render(<Component />, container);
454 -
455 - expect(innerInstance).not.toBe(undefined);
456 - expect(function() {
457 - innerInstance.setProps({value: 1});
458 - }).toThrow(
459 - 'setProps(...): You called `setProps` on a component with a parent. ' +
460 - 'This is an anti-pattern since props will get reactively updated when ' +
461 - 'rendered. Instead, change the owner\'s `render` method to pass the ' +
462 - 'correct value as props to the component where it is created.'
463 - );
464 - });
465 -
412 it('should cleanup even if render() fatals', function() {
413 var BadComponent = React.createClass({
414 render: function() {