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

React Native:为何App()内变量频繁重置,外部变量却不会?

React组件变量更新差异解析

核心结论

是的,每次点击按钮触发状态更新后,App组件函数都会重新执行——这是React的渲染机制导致的,也是两类变量行为不同的根本原因。

1. 全局变量(globalVar)的正常更新逻辑

  • globalVar声明在App函数外部,属于模块级作用域,整个应用生命周期中只会初始化一次,不会随组件重新渲染被重置。
  • 每次点击按钮执行globalVar += 10时,都是直接修改这个全局唯一的变量值,所以每次更新都是持续累加,表现为10→20→30…的预期效果。

2. 函数内部变量(localVar)的波动原因

  • localVar是在App函数内部声明的,组件每一次重新渲染(也就是App函数重新执行)时,都会重新声明并赋值为10。
  • 第一次点击按钮:localVar从10变为20,调用setThing更新state触发组件重渲染;重渲染时localVar被重置回10;第二次点击又会把它变成20,如此循环,就出现了在10和20之间静态波动的现象。

替代方案:组件内持久化可变值

如果想在组件内部维护一个不随渲染重置的可变值,应该使用React的useRef钩子:

import { Text, Button, View, useRef, useState } from 'react-native';

let globalVar = 10;

export default function App() {
  const localVarRef = useRef(10);
  const [thing, setThing] = useState(0);
  return (
    <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
      <Text>{thing}</Text>
      <Button
        title="press global"
        onPress={() => setThing((globalVar += 10))}></Button>
      <Button 
        title="press local" 
        onPress={() => {
          localVarRef.current += 10;
          setThing(localVarRef.current);
        }}></Button>
    </View>
  );
}

useRef的current属性会在组件整个生命周期中保持引用,不会随渲染重置,能实现和全局变量类似的累加效果,但作用域被限制在组件内部,更符合组件封装的原则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 07:25:17