dillon1000/react

Commit

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
Browse files
Changed paths38 files
First-parent comparison
M packages/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 Modified
Patch

Files changed

Rendering syntax-highlighted changes…