rsnext/examples/with-why-did-you-render/README.md
Dominic Elm d2caaeab64
docs: add 'Open in StackBlitz' buttons to various examples (#25853)
This PR adds a `Preview` section and a `Open in StackBlitz` button to various examples. I have tested all examples and omitted the ones that require third party API keys, or didn't work. Some examples don't work locally either.

Here's an example:
![image](https://user-images.githubusercontent.com/12571019/121027783-88971280-c7a7-11eb-851a-0ad30cf74b42.png)

## Bug

- [ ] Related issues linked using `fixes #number`
- [ ] Integration tests added

## Feature

- [ ] Implements an existing feature request or RFC. Make sure the feature request has been accepted for implementation before opening a PR.
- [ ] Related issues linked using `fixes #number`
- [ ] Integration tests added
- [ ] Documentation added
- [x] Examples updated
- [ ] Telemetry added. In case of a feature if it's used or not.

## Documentation / Examples

- [x] Make sure the linting passes
2021-06-08 20:45:02 +00:00

2.8 KiB

Why did you render

This is a simple example of how to use why-did-you-render.

The header component will rerender despite the state staying the same.

You can see why-did-you-render console logs about this redundant re-render in the developer console.

Installation guide

  1. add why-did-you-render to the project by running:

    yarn add @welldone-software/why-did-you-render
    
  2. Create scripts/wdyr.js with the code:

    import React from 'react'
    
    if (process.env.NODE_ENV === 'development') {
      if (typeof window !== 'undefined') {
        const whyDidYouRender = require('@welldone-software/why-did-you-render')
        whyDidYouRender(React, {
          trackAllPureComponents: true,
        })
      }
    }
    
  3. Import scripts/wdyr.js as the first import of _app.

  4. Make sure that react-preset uses @welldone-software/why-did-you-render to import the monkey patched React with WDYR, by modifying next/babel in babel.config.js:

// babel.config.js
module.exports = function (api) {
  const isServer = api.caller((caller) => caller?.isServer)
  const isCallerDevelopment = api.caller((caller) => caller?.isDev)

  const presets = [
    [
      'next/babel',
      {
        'preset-react': {
          importSource:
            !isServer && isCallerDevelopment
              ? '@welldone-software/why-did-you-render'
              : 'react',
        },
      },
    ],
  ]

  return { presets }
}

Preview

Preview the example live on StackBlitz:

Open in StackBlitz

Deploy your own

Deploy the example using Vercel:

Deploy with Vercel

How to use

Execute create-next-app with npm or Yarn to bootstrap the example:

npx create-next-app --example with-why-did-you-render with-why-did-you-render-app
# or
yarn create next-app --example with-why-did-you-render with-why-did-you-render-app

Deploy it to the cloud with Vercel (Documentation).