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

React中变量guest自增2而非指定1的原因排查

问题原因及解决方案

为什么guest每次自增2?

这是**开发环境下React严格模式(Strict Mode)**的特性导致的:

  • React在开发模式中,为了检测组件中的潜在副作用(比如不合理的全局变量修改),会自动将组件函数调用两次。
  • 你的guest是全局变量,每调用一次Cup组件它就会自增1。现在每个Cup被调用两次,最终就出现了编号为2、4、6的结果。

正确的写法

不要用全局变量管理组件状态,React提供了专门的状态管理工具来处理这类场景,比如useState钩子,或者通过props传递固定编号。

方案1:直接渲染固定数量的杯子(适合数量固定的场景)

export default function TeaSet() {
  return (
    <>
      {[1, 2, 3].map(num => (
        <h2 key={num}>Tea cup for guest #{num}</h2>
      ))}
    </>
  );
}

方案2:用useState管理动态数量的杯子(适合数量可能变化的场景)

import { useState } from 'react';

// 子组件接收编号作为props
function Cup({ guestNum }) {
  return <h2>Tea cup for guest #{guestNum}</h2>;
}

export default function TeaSet() {
  // 可以动态调整杯子数量
  const [cupCount, setCupCount] = useState(3);
  
  return (
    <>
      {Array.from({ length: cupCount }, (_, index) => (
        <Cup key={index} guestNum={index + 1} />
      ))}
    </>
  );
}

总结

全局变量不适合在React组件中追踪状态,因为React无法控制全局变量的修改逻辑,再加上开发模式下Strict Mode的二次调用,很容易出现不符合预期的结果。始终使用React提供的状态管理工具(如useState)或props传递数据,才能让组件的渲染和更新符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 13:51:00