カランのブログ

ソフトウェアエンジニア / 台湾人 / 福岡生活

今のモード ライト

react-transition-groupをv1からv4にアップグレードする際の重要な変更点は次の通りです:

  1. CSSTransitionGroupコンポーネントが削除されました。
  2. leaveexitに変更されました。
  3. transitionNameclassNamesに変更されました。
  4. transitionEnterTimeoutなどがtimeoutオブジェクトに変更されました。
  5. transition{Appear, Enter, Leave}appearenterexitに変更されました。

以下のメソッドがコンポーネント内で使用されている場合は、少し手間がかかります。自分で削除する必要があります:

  • componentWillAppear
  • componentDidAppear
  • componentWillEnter
  • componentDidEnter
  • componentWillLeave
  • componentDidLeave

特に奇妙なハックがない場合は、jscodeshiftを使用して変換することも考慮できます。コンポーネントが移行するのが困難なほど大きくなっている場合は、次のように元のプロパティをラップするラッパーコンポーネントを作成することもできます:

/**
 * 注意:
 * これはTransition.jsの一時的なラッパーコンポーネントです。
 * v1の`CSSTransitionGroup`と同じAPIを提供します。
 */
import * as React from 'react';
import { TransitionGroup, CSSTransition } from 'react-transition-group';

type Props = {
  component?: React.ReactNode;
  transitionName: string;
  transitionEnterTimeout?: number;
  transitionExitTimeout?: number;
  transitionEnter?: boolean;
  transitionExit?: boolean;
  children: React.ReactNode,
};

const CSSTransitionGroup = ({
  transitionEnterTimeout= 0,
  transitionExitTimeout= 0,
  transitionEnter= true,
  transitionExit= true,
  transitionName,
  children,
  component,
}: Props) => {
  const transitionChildrenProps = {
    classNames: transitionName,
    timeout: { enter: transitionEnterTimeout, exit: transitionExitTimeout }
  };

  const transitions = React.Children.map(children, (child: any) => (
    <CSSTransition key={`transition-${child.key}`} {...transitionChildrenProps}>{child}</CSSTransition>
  ));

  return (
    <TransitionGroup
			component={component}
			enter={transitionEnter}
			exit={transitionExit}
 		>
      {transitions}
    </TransitionGroup>
  );
};

export default CSSTransitionGroup

これで無痛に移行できます。ただし、メンテナンスのために少しずつ削除することをお勧めします。

次の記事

クラスコンポーネントからフックへ

前の記事

技術的変化の推進

この文章が役に立つと思うなら、下のリンクで応援してくれると大変嬉しいです✨

Buy me a coffee

作者

Kalan 頭像照片,在淡水拍攝,淺藍背景

愷開 | Kalan

Kalan です。台湾出身で、2019年に日本へ転職し、福岡に住んでいます。フロントエンド開発に精通しているだけでなく、IoT、アプリ開発、バックエンド、電子工作などの分野にも挑戦しています。 最近、エレキギターを始めました。ブログを通じて、より多くの人と交流できればと思っています。気軽に絡んでください