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

React函数组件中外部声明变量值丢失问题求助

问题解决:React中ref赋值后重渲染变回null的问题

问题原因

组件每次重渲染时,组件函数会重新执行,你定义的let animation = null;会被重新初始化,之前通过animationRef赋值的引用会被覆盖成null,这就是重渲染后它变回null的核心原因。

解决方案:用useRef替代普通变量

React的useRef Hook专门用来保存跨渲染周期的可变值,它的.current属性不会随组件重渲染而重置。修改代码如下:

import { useRef } from 'react';

// 创建持久化的引用容器
const animation = useRef(null);

const animationRef = (ref) => {
    console.log(ref);
    animation.current = ref;
};

后续访问时直接使用animation.current即可,无论组件是否重渲染,这个值都会保持最新的引用,包括在matter.js的Events事件处理器中也能正常访问。

为什么原写法失效?

普通变量属于组件函数的局部作用域,每次组件因state、props变化重渲染时,函数会从头执行,变量会被重新声明并赋值为null,之前的赋值自然丢失。而useRef创建的对象是React在组件挂载时生成的,整个生命周期内都是同一个对象,.current属性可自由修改且不会被重置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 03:30:53