-
Notifications
You must be signed in to change notification settings - Fork 7.7k
Document React.pure #1266
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Document React.pure #1266
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
|
@@ -26,6 +26,10 @@ React components let you split the UI into independent, reusable pieces, and thi | |||||
|
||||||
If you don't use ES6 classes, you may use the `create-react-class` module instead. See [Using React without ES6](/docs/react-without-es6.html) for more information. | ||||||
|
||||||
React components can also be defined as functions which can be wrapped by further functionality. | ||||||
|
||||||
- [`React.pure`](#reactpure) | ||||||
|
||||||
### Creating React Elements | ||||||
|
||||||
We recommend [using JSX](/docs/introducing-jsx.html) to describe what your UI should look like. Each JSX element is just syntactic sugar for calling [`React.createElement()`](#createelement). You will not typically invoke the following methods directly if you are using JSX. | ||||||
|
@@ -88,6 +92,42 @@ If your React component's `render()` function renders the same result given the | |||||
|
||||||
* * * | ||||||
|
||||||
### `React.pure` | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
|
||||||
```javascript | ||||||
const MyComponent = React.pure(function(props) { | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
/* render using props */ | ||||||
}); | ||||||
``` | ||||||
|
||||||
`React.pure` is a [higher order component](/docs/higher-order-components.html). It's similar to [`React.PureComponent`](#reactpurecomponent) but for function components instead of classes. | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
|
||||||
If your function component renders the same result given the same props, you can wrap it in a call to `React.pure` for a performance boost in some cases by memoizing the result. | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
|
||||||
By default it will only shallowly compare complex objects in the props object. If you want control over the comparison, you can also provide a custom comparison function as the second argument. | ||||||
|
||||||
```javascript | ||||||
function render(props) { | ||||||
/* render using props */ | ||||||
} | ||||||
function equals(prevProps, nextProps) { | ||||||
/* | ||||||
return true if passing nextProps to render would return | ||||||
the same result as passing prevProps to render, | ||||||
otherwise return false | ||||||
*/ | ||||||
} | ||||||
const MyComponent = React.pure(render, equals); | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
``` | ||||||
|
||||||
This method only exists as a **[performance optimization](/docs/optimizing-performance.html).** Do not rely on it to "prevent" a rendering, as this can lead to bugs. | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
|
||||||
> Note | ||||||
> | ||||||
> Unlike the [`shouldComponentUpdate()`](/docs/react-component.html#shouldcomponentupdate) method on class components, the `areEqual` function returns `true` if the props are equal and `false` if the props are not equal. This is the inverse from `shouldComponentUpdate`. | ||||||
|
||||||
* * * | ||||||
|
||||||
### `createElement()` | ||||||
|
||||||
```javascript | ||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.