カランのブログ

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

四零二曜日電子報上線啦!訂閱訂起來

ソフトウェアエンジニア / 台湾人 / 福岡生活
このブログはRSS Feed をサポートしています。RSSリンクをクリックして設定してください。技術に関する記事はコードがあるのでブログで閲覧することをお勧めします。

今のモード ライト

我會把一些不成文的筆記或是最近的生活雜感放在短筆記,如果有興趣的話可以來看看唷!

記事のタイトルや概要は自動翻訳であるため(中身は翻訳されてない場合が多い)、変な言葉が出たり、意味伝わらない場合がございます。空いてる時間で翻訳します。

リアクトトランジショングループを移行

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