dillon1000/react
Commit
Browse files RFC 6: Deprecate unsafe lifecycles (#12028)
* Added unsafe_* lifecycles and deprecation warnings If the old lifecycle hooks (componentWillMount, componentWillUpdate, componentWillReceiveProps) are detected, these methods will be called and a deprecation warning will be logged. (In other words, we do not check for both the presence of the old and new lifecycles.) This commit is expected to fail tests. * Ran lifecycle hook codemod over project This should handle the bulk of the updates. I will manually update TypeScript and CoffeeScript tests with another commit. The actual command run with this commit was: jscodeshift --parser=flow -t ../react-codemod/transforms/rename-unsafe-lifecycles.js ./packages/**/src/**/*.js * Manually migrated CoffeeScript and TypeScript tests * Added inline note to createReactClassIntegration-test Explaining why lifecycles hooks have not been renamed in this test. * Udated NativeMethodsMixin with new lifecycle hooks * Added static getDerivedStateFromProps to ReactPartialRenderer Also added a new set of tests focused on server side lifecycle hooks. * Added getDerivedStateFromProps to shallow renderer Also added warnings for several cases involving getDerivedStateFromProps() as well as the deprecated lifecycles. Also added tests for the above. * Dedupe and DEV-only deprecation warning in server renderer * Renamed unsafe_* prefix to UNSAFE_* to be more noticeable * Added getDerivedStateFromProps to ReactFiberClassComponent Also updated class component and lifecyle tests to cover the added functionality. * Warn about UNSAFE_componentWillRecieveProps misspelling * Added tests to createReactClassIntegration for new lifecycles * Added warning for stateless functional components with gDSFP * Added createReactClass test for static gDSFP * Moved lifecycle deprecation warnings behind (disabled) feature flag Updated tests accordingly, by temporarily splitting tests that were specific to this feature-flag into their own, internal tests. This was the only way I knew of to interact with the feature flag without breaking our build/dist tests. * Tidying up * Tweaked warning message wording slightly Replaced 'You may may have returned undefined.' with 'You may have returned undefined.' * Replaced truthy partialState checks with != null * Call getDerivedStateFromProps via .call(null) to prevent type access * Move shallow-renderer didWarn* maps off the instance * Only call getDerivedStateFromProps if props instance has changed * Avoid creating new state object if not necessary * Inject state as a param to callGetDerivedStateFromProps This value will be either workInProgress.memoizedState (for updates) or instance.state (for initialization). * Explicitly warn about uninitialized state before calling getDerivedStateFromProps. And added some new tests for this change. Also: * Improved a couple of falsy null/undefined checks to more explicitly check for null or undefined. * Made some small tweaks to ReactFiberClassComponent WRT when and how it reads instance.state and sets to null. * Improved wording for deprecation lifecycle warnings * Fix state-regression for module-pattern components Also add support for new static getDerivedStateFromProps method
Changed paths38 files
First-parent comparisonpackages/react-call-return/src/__tests__/ReactCallReturn-test.js ModifiedA packages/react-dom/src/__tests__/ReactComponentLifeCycle-test.internal.js AddedM packages/react-dom/src/__tests__/ReactComponentLifeCycle-test.js ModifiedM packages/react-dom/src/__tests__/ReactCompositeComponent-test.js ModifiedM packages/react-dom/src/__tests__/ReactCompositeComponentState-test.js ModifiedM packages/react-dom/src/__tests__/ReactDOMServerIntegrationContext-test.js ModifiedA packages/react-dom/src/__tests__/ReactDOMServerLifecycles-test.internal.js AddedA packages/react-dom/src/__tests__/ReactDOMServerLifecycles-test.js AddedM packages/react-dom/src/__tests__/ReactErrorBoundaries-test.js ModifiedM packages/react-dom/src/__tests__/ReactMultiChild-test.js ModifiedM packages/react-dom/src/__tests__/ReactServerRendering-test.js ModifiedM packages/react-dom/src/__tests__/ReactStatelessComponent-test.js ModifiedM packages/react-dom/src/__tests__/ReactUpdates-test.js ModifiedM packages/react-dom/src/__tests__/findDOMNode-test.js ModifiedM packages/react-dom/src/server/ReactPartialRenderer.js ModifiedM packages/react-native-renderer/src/NativeMethodsMixin.js ModifiedM packages/react-reconciler/src/ReactFiberBeginWork.js ModifiedM packages/react-reconciler/src/ReactFiberClassComponent.js ModifiedM packages/react-reconciler/src/__tests__/ReactIncremental-test.js ModifiedM packages/react-reconciler/src/__tests__/ReactIncrementalErrorLogging-test.internal.js ModifiedM packages/react-reconciler/src/__tests__/ReactIncrementalPerf-test.internal.js ModifiedM packages/react-reconciler/src/__tests__/ReactIncrementalReflection-test.js ModifiedM packages/react-reconciler/src/__tests__/ReactIncrementalScheduling-test.js ModifiedM packages/react-reconciler/src/__tests__/ReactIncrementalUpdates-test.js ModifiedM packages/react-test-renderer/src/ReactShallowRenderer.js ModifiedA packages/react-test-renderer/src/__tests__/ReactShallowRenderer-test.internal.js AddedM packages/react-test-renderer/src/__tests__/ReactShallowRenderer-test.js ModifiedM packages/react/src/__tests__/ReactAsyncClassComponent-test.internal.js ModifiedM packages/react/src/__tests__/ReactCoffeeScriptClass-test.coffee ModifiedM packages/react/src/__tests__/ReactContextValidator-test.js ModifiedM packages/react/src/__tests__/ReactES6Class-test.js ModifiedM packages/react/src/__tests__/ReactTypeScriptClass-test.ts ModifiedA packages/react/src/__tests__/createReactClassIntegration-test.internal.js AddedM packages/react/src/__tests__/createReactClassIntegration-test.js ModifiedM packages/shared/ReactFeatureFlags.js ModifiedM packages/shared/forks/ReactFeatureFlags.native-cs.js ModifiedM packages/shared/forks/ReactFeatureFlags.native.js ModifiedM packages/shared/forks/ReactFeatureFlags.www.js ModifiedPatch
Files changed
Rendering syntax-highlighted changes…