Why Did You Render

endsoul·2020년 12월 18일
0

설치

yarn add @welldone-software/why-did-you-render

.babelrc.js

'@babel/preset-react', {
  runtime: 'automatic',
  development: process.env.NODE_ENV === 'development',
  importSource: '@welldone-software/why-did-you-render',
}

프로젝트에서 가장 먼저 import 해야 함. react-hot-loader 보다 더 먼저!!!
wdyr.ts 파일에 아래 코드를 추가하고 프로젝트 엔트리 파일(App.tsx 또는 index.tsx) 에서 import './wdyr.ts';

Error: await import 사용하면 에러가 발생함.

import React from 'react';

export const setWhyDidYouRender = async (): Promise<void> => {
  if (process.env.NODE_ENV === 'development') {
    const { default: whyDidYouRender } = await import(
      '@welldone-software/why-did-you-render'
    );

    whyDidYouRender(React, {
      include: [/.*/],
    });
  }
};

setWhyDidYouRender();

Solved

if (process.env.NODE_ENV === 'development') {
  // eslint-disable-next-line @typescript-eslint/no-var-requires
  const whyDidYouRender = require('@welldone-software/why-did-you-render');
  whyDidYouRender(React, {
    include: [/.*/],
  });
}

index.tsx

/// <reference types="@welldone-software/why-did-you-render" />

// Only for development mode
import './wdyr';

import React from 'react';
import ReactDOM from 'react-dom';

formState 객체의 isDirty 값을 읽어 오면 re-rendering 메시지 안 뜸.

const {
    register,
    handleSubmit,
    errors,
    // Read the formState before render to subscribe the form state through Proxy
    formState: { isDirty, isSubmitting, touched, submitCount },
  } = useForm<FormInputs>();

0개의 댓글