Browse Source

Update legacy lifecycle methods (#2435)

* Update legacy lifecycle methods

componentWillReceiveProps -> componentDidUpdate

* Update legacy lifecycle methods

componentWillReceiveProps -> componentDidUpdate

* Update higher-order-components.md

Co-authored-by: Sunil Pai <threepointone@oculus.com>
main
Tom Beckenhauer 5 years ago
committed by GitHub
parent
commit
e3a6479989
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 10
      content/docs/higher-order-components.md

10
content/docs/higher-order-components.md

@ -177,9 +177,9 @@ Resist the temptation to modify a component's prototype (or otherwise mutate it)
```js ```js
function logProps(InputComponent) { function logProps(InputComponent) {
InputComponent.prototype.componentWillReceiveProps = function(nextProps) { InputComponent.prototype.componentDidUpdate = function(prevProps) {
console.log('Current props: ', this.props); console.log('Current props: ', this.props);
console.log('Next props: ', nextProps); console.log('Previous props: ', prevProps);
}; };
// The fact that we're returning the original input is a hint that it has // The fact that we're returning the original input is a hint that it has
// been mutated. // been mutated.
@ -190,7 +190,7 @@ function logProps(InputComponent) {
const EnhancedComponent = logProps(InputComponent); const EnhancedComponent = logProps(InputComponent);
``` ```
There are a few problems with this. One is that the input component cannot be reused separately from the enhanced component. More crucially, if you apply another HOC to `EnhancedComponent` that *also* mutates `componentWillReceiveProps`, the first HOC's functionality will be overridden! This HOC also won't work with function components, which do not have lifecycle methods. There are a few problems with this. One is that the input component cannot be reused separately from the enhanced component. More crucially, if you apply another HOC to `EnhancedComponent` that *also* mutates `componentDidUpdate`, the first HOC's functionality will be overridden! This HOC also won't work with function components, which do not have lifecycle methods.
Mutating HOCs are a leaky abstraction—the consumer must know how they are implemented in order to avoid conflicts with other HOCs. Mutating HOCs are a leaky abstraction—the consumer must know how they are implemented in order to avoid conflicts with other HOCs.
@ -199,9 +199,9 @@ Instead of mutation, HOCs should use composition, by wrapping the input componen
```js ```js
function logProps(WrappedComponent) { function logProps(WrappedComponent) {
return class extends React.Component { return class extends React.Component {
componentWillReceiveProps(nextProps) { componentDidUpdate(prevProps) {
console.log('Current props: ', this.props); console.log('Current props: ', this.props);
console.log('Next props: ', nextProps); console.log('Previous props: ', prevProps);
} }
render() { render() {
// Wraps the input component in a container, without mutating it. Good! // Wraps the input component in a container, without mutating it. Good!

Loading…
Cancel
Save