You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

react-transition-group三元表达式同时渲染if/else分支问题解决

解决TransitionGroup下空列表提示未消失的问题

问题根源在于 TransitionGroup 的渲染规则:它要求所有直接子元素必须是过渡组件(如CSSTransition)。当你直接渲染文本节点作为子元素时,TransitionGroup 无法正确跟踪它的卸载生命周期,导致添加列表项后提示文本依然滞留在DOM中。

方案一:给空提示也包裹过渡组件

将空状态提示套入CSSTransition并设置唯一key,让TransitionGroup能正确处理它的卸载逻辑:

const ItemsList = ({ items }) => {
  return (
    <TransitionGroup component="ul" timeout={400}>
      {items.length === 0 ? (
        <CSSTransition key="empty-state" classNames="item-animation" timeout={400}>
          <li>There is no items</li>
        </CSSTransition>
      ) : (
        items.map((item, i) => (
          <CSSTransition key={i} classNames="item-animation">
            <li key={i}>{item}</li>
          </CSSTransition>
        ))
      )}
    </TransitionGroup>
  );
};

方案二:将空提示移到TransitionGroup外部

直接在过渡组之外判断空状态,完全避开TransitionGroup的特殊渲染逻辑,这也是更简洁的处理方式:

const ItemsList = ({ items }) => {
  if (items.length === 0) {
    return <p>There is no items</p>;
  }
  
  return (
    <TransitionGroup component="ul" timeout={400}>
      {items.map((item, i) => (
        <CSSTransition key={i} classNames="item-animation">
          <li key={i}>{item}</li>
        </CSSTransition>
      ))}
    </TransitionGroup>
  );
};

推荐第二种方案,因为空状态提示通常不需要动画效果,放在过渡组外更符合业务逻辑,也能避免过渡组件带来的不必要性能开销。

内容的提问来源于stack exchange,提问作者rodorgas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 15:25:21