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

React中如何获取子组件的状态值并同步到父组件展示

React父子组件状态同步方案

方案1:状态提升(推荐使用)

该方案消除了重复的状态定义,从根源避免父子组件状态不一致的问题,所有状态变更统一在父组件管理,子组件仅作为受控组件使用,适配绝大多数业务场景。

修改后父组件代码

import React, {useState} from 'react';
import Child from "./Child";

const Parent = () => {
    const [value, setValue] = useState(0);
    return (
        <>
            <span>{value}</span>
            {/* 把状态和更新状态的方法都传给子组件 */}
            <Child value={value} setValue={setValue} />
        </>
    );
}
export default Parent;

修改后子组件代码

import React from 'react';

// 接收父组件传的value和setValue方法,不需要单独维护内部state
const Child = ({value, setValue}) => {
    const increment = () => {
        setValue(prevState => prevState + 1)
    };

    const decrement = () => {
        setValue(prevState => prevState - 1)
    };

    return (
        <>
            <button onClick={increment}>+</button>
            <span>{value}</span>
            <button onClick={decrement}>-</button>
        </>
    );
};
export default Child;

方案2:保留子组件独立state,同步更新到父组件

如果业务场景需要子组件独立维护自身状态,同时需要把状态同步给父组件,可以通过父组件传递回调函数的方式实现:

修改后父组件代码

import React, {useState} from 'react';
import Child from "./Child";

const Parent = () => {
    const [value, setValue] = useState(0);
    // 定义接收子组件状态的回调方法
    const handleChildValueChange = (newVal) => {
        setValue(newVal);
    }
    return (
        <>
            <span>{value}</span>
            <Child initValue={value} onChange={handleChildValueChange} />
        </>
    );
}
export default Parent;

修改后子组件代码

import React, {useState, useEffect} from 'react';

const Child = ({initValue, onChange}) => {
    const [value, setValue] = useState(initValue);

    // 可选配置:如果父组件的initValue会外部变更,可加effect同步子组件的初始值,初始值固定可删除该逻辑
    useEffect(() => {
        setValue(initValue);
    }, [initValue]);

    const increment = () => {
        setValue(prevState => {
            const newVal = prevState + 1;
            // 状态变更后调用父组件传的回调,同步最新值
            onChange(newVal);
            return newVal;
        })
    };

    const decrement = () => {
        setValue(prevState => {
            const newVal = prevState - 1;
            onChange(newVal);
            return newVal;
        })
    };

    return (
        <>
            <button onClick={increment}>+</button>
            <span>{value}</span>
            <button onClick={decrement}>-</button>
        </>
    );
};
export default Child;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 18:27:03