logo
  • 現在做什麼
  • 關於我

Kalan

文章分類

  • 前端
  • 開發筆記
  • 雜談
  • 年度回顧

快速連結

  • 現在做什麼
  • 關於我
  • 聯絡我
  • 職涯思考🔗

關注我

在福岡生活的開發者,分享軟體開發與日本生活的點點滴滴。

© 2025 Kalan Made with ❤️. All rights reserved.

migrate react-transition-group

由愷開愷開撰寫2019年8月19日 9:00
首頁/前端
💡

如果想問問題或單純回饋的話可以填寫表單唷

English日文

目錄

    react-transition-group 從 v1 升級到 v4 比較重要的有幾點:

    1. 升級後 CSSTransitionGroup 元件被移除了
    2. leave 變成 exit
    3. transitionName 變成 classNames
    4. transitionEnterTimeout 之類的變成 timeout 物件
    5. transition{Appear, Enter, Leave} 變成 appear, enter, exit

    如果在元件中有用到下列方法的就比較麻煩一點了,要自己拔掉:

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

    沒有什麼奇怪的 hack 的話,也可以考慮用 jscodeshift 轉移。如果元件已經肥大到沒辦法輕易 migrate 的話,可以建立一個 wrapper 把原本的 props 包裝一下:

    /**
     * NOTE:
     * This is temporary wrapper component for Transition.js,
     * It provides the same API as `CSSTransitionGroup` in v1
     */
    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

    這樣就可以無痛轉移了。不過為了方便維護著想,還是要慢慢拔掉啊。

    ← 從 class component 到 hooksDriving Technical Change →

    如果覺得這篇文章對你有幫助的話,可以考慮下面的連結請我喝一杯 ☕ 可以讓我平凡的一天變得閃閃發光 ✨

    ☕Buy me a coffee