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

如何不拆分独立组件,使用同一函数分别更新复用的count状态变量?

解决方案

原代码的问题在于两个按钮共用了同一个count状态,所以任意按钮触发更新都会同步修改两个位置的渲染值,不需要拆分组件也能实现需求,可选方案如下:

方案1:声明独立状态变量(最简单高效,适合按钮数量少的场景)

直接给两个按钮分别声明独立的state,更新函数可复用,传入标识区分要更新的状态即可,无额外性能开销:

import { useState } from 'react';

function Foo() {
    const [count1, setCount1] = useState(0);
    const [count2, setCount2] = useState(0);

    // 复用更新逻辑,函数式更新可避免闭包问题
    function incrementCount(btnType) {
        if (btnType === 'btn1') {
            setCount1(prev => prev + 1);
        } else if (btnType === 'btn2') {
            setCount2(prev => prev + 1);
        }
    }
    return(
        <div>
            {/* 按钮1 */}
            <div>
                <p>count: {count1}</p>
                <button onClick={() => incrementCount('btn1')}>Click</button>
            </div>

            {/* 按钮2 */}
            <div>
                <p>count: {count2}</p>
                <button onClick={() => incrementCount('btn2')}>Click</button>
            </div>
             
        </div>
    )
}
export default Foo;

方案2:单对象存储多状态(适合按钮数量多、后续有扩展需求的场景)

如果后续可能新增更多同类型按钮,可以把所有计数存在同一个对象类型的state里,扩展性更强:

import { useState } from 'react';

function Foo() {
    // 用对象存储所有按钮的计数值,key为按钮的唯一标识
    const [counts, setCounts] = useState({
        btn1: 0,
        btn2: 0
    });

    function incrementCount(btnKey) {
        setCounts(prev => ({
            ...prev,
            [btnKey]: prev[btnKey] + 1
        }));
    }
    return(
        <div>
            <div>
                <p>count: {counts.btn1}</p>
                <button onClick={() => incrementCount('btn1')}>Click</button>
            </div>
            <div>
                <p>count: {counts.btn2}</p>
                <button onClick={() => incrementCount('btn2')}>Click</button>
            </div>
        </div>
    )
}
export default Foo;

两种方案都完全符合不拆分组件的要求,逻辑简单直接,性能也优于拆分组件复用的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 14:09:03