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

React useEffect实现文本渲染后动画异常问题解决方案

问题修复方案

你遇到的白屏、内容不渲染问题由3处代码错误共同导致,按以下步骤修复即可:

1. 修正useEffect的错误返回值

useEffect的回调函数只能返回undefined或者清理函数,你当前直接将setTimeout的返回值(数字类型的定时器ID)作为返回值返回,React18开发环境严格模式下会检测到非法返回值抛出运行时错误,导致整个应用白屏,只剩外层背景。
将原useEffect代码:

useEffect(() => {
    return setTimeout(() => {setLetterClass('text-animate-hover')}, 4000)}, [])

替换为正确写法,同时增加定时器清理逻辑避免内存泄漏:

useEffect(() => {
    const timer = setTimeout(() => {
        setLetterClass('text-animate-hover')
    }, 4000)
    // 组件卸载时清除定时器
    return () => clearTimeout(timer)
}, [])

2. 修正父子组件传参的命名不匹配问题

父组件Home.js向子组件AnimatedLetters传递props时,参数名和子组件内解构接收的参数名大小写、命名不一致,导致子组件接收到的动画类名、索引参数全部为undefined,生成的文本元素类名完全错误,动画失效。
将Home.js中两处AnimatedLetters组件的传参修改为和子组件接收名一致:

<AnimatedLetter 
  letterClass={LetterClass}
  strArray={nameArray}
  index={6} 
/>
<br />
<AnimatedLetter 
  letterClass={LetterClass}
  strArray={jobArray}
  index={14} 
/>

3. 修正样式问题并补充动画依赖

  • 你代码中用到的bounceIn、rubberBand属于animate.css的预设动画,如果没有引入animate.css样式文件,会导致初始设置了opacity:0的文本元素因为动画不存在一直保持透明不可见。在项目入口文件(比如index.js)或者Home.js顶部引入样式即可:
import 'animate.css'

如果你是自定义实现动画关键帧,忽略这一步即可。

  • AnimatedLetter.scss中.text-animate-hover的hover嵌套写法有误,SCSS中需要加&指代当前父选择器,否则hover效果不会绑定到文本元素本身,修改对应样式:
.text-animate-hover {
  min-width: 10px;
  display: inline-block;
  animation-fill-mode: both;

  &:hover {
    animation: rubberBand 1s;
    color: #ffd700;
  }
}

修复后页面首次加载时会按顺序触发逐字弹入动画,4秒后自动切换为hover类,鼠标悬停在文字上会触发摇摆变色效果,侧边栏、首页文本都会正常渲染。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 07:39:21