react-transition-group 在 React 18 及以上版本中的兼容性问题

出现问题

在React19中下载react-transition-group(4.4.5),正常导入使用:

出现下述报错:

报错原因

React18开始,已废弃findDOMNode ,而 react-transition-group 的 4.4.5 版本仍然使用了 findDOMNode来获取DOM节点,以便在动画中直接使用这些节点,从而导致报错

那么早期react-transition-group是如何使用findDOMNod的那?

1.获取DOM获取 DOM 节点以应用动画:

2.处理动画的生命周期:

为什么被废弃?
1.React18 引入了Concurrent Mode,允许 React 在后台执行工作,并在必要时中断和恢复渲染。 react-transition-group 与 Concurrent Mode 的工作方式不兼容;

2.React 推荐使用更高级别的抽象(如ref)来处理 DOM 操作,而不是直接使用findDOMNode

解决方法:使用ref

  1. 引入useRef

  2. 创建一个ref

  3. 将ref传递给nodeRef属性

  4. 将ref附加到目标 DOM 元素上

import React, { useRef } from 'react';
import { CSSTransition,SwitchTransition } from 'react-transition-group'

const MyComponent = () => {
  const imgRef = useRef(null); // 创建一个 ref

  return (
    <SwitchTransition mode='in-out'>
      <CSSTransition
      nodeRef={imgRef} 
      key={pictureUrls[currentIndex]}
      classNames="pic"
      timeout={200}
      >
      <img ref={imgRef} src={pictureUrls[currentIndex]} alt="" />
      </CSSTransition>
    </SwitchTransition>
  );
};

export default MyComponent;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值