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

如何在React中不使用state或this实现增减计数功能?

可以实现,以下是两种可落地的实现方案:


方案1:全局变量+原生DOM操作

和你提供的原生JS实现逻辑最接近,直接把计数变量定义在组件外部,点击时更新变量后直接修改对应DOM的内容即可,代码示例:

// 计数变量定义在组件外部,不受组件重渲染影响
let count = 0;

function Counter() {
  const up = () => {
    count++;
    document.querySelector('.up').textContent = count;
  };

  return (
    <div>
      <button onClick={up}>点击+1</button>
      <div className="up">{count}</div>
    </div>
  );
}

注意:该方案的计数变量是全局共享的,如果你在页面中渲染多个Counter组件实例,所有实例会共用同一个count值,互相影响。


方案2:useRef存储计数

useRef的current属性可以存储可变数据,更新时不会触发组件重渲染,同时不需要用到state和this关键字,每个组件实例会有独立的ref存储,不会出现多实例互相影响的问题,代码示例:

import { useRef } from 'react';

function Counter() {
  // 用ref存储计数初始值
  const countRef = useRef(0);

  const up = () => {
    countRef.current++;
    document.querySelector('.up').textContent = countRef.current;
  };

  return (
    <div>
      <button onClick={up}>点击+1</button>
      <div className="up">{countRef.current}</div>
    </div>
  );
}

补充说明

以上两种方案都绕过了React的状态更新机制,仅能满足基础的计数展示需求,如果你有更复杂的联动渲染逻辑,还是推荐使用React官方提供的state来实现,更符合框架设计理念,也更容易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:15:04