将多个子组件中共享的状态移动到它们最近的共同父组件中,由父组件统一管理,再通过 props 向下分发。这是 React 单向数据流的核心实践。
| 通信类型 | 机制 | 典型场景 |
|---|---|---|
| 父 → 子 | props 传递状态 / 数据 | 父组件将 count 传给子组件显示 |
| 子 → 父 | 父传入回调函数 (onXxx) | 子组件点击按钮,调用父组件的更新函数 |
| 兄弟 → 兄弟 | 通过父组件共享状态 (状态提升) | 两个输入框同步显示相同内容 |
| 跨层 (非必须) | Context / 状态管理库 (进阶) | 主题、用户信息 (本课聚焦提升) |
💡 状态提升让兄弟组件通过父级“间接对话”,保持数据单向流动。
⬆️ 父组件持有状态,通过 props 向下派发,子组件通过回调向上“通知”
两个输入框(摄氏/华氏)同步同一个温度值,状态提升至 Calculator 父组件。
// 父组件:状态提升 + 单向数据流
function Calculator() {
const [temperature, setTemperature] = useState('');
const handleChange = (value) => {
setTemperature(value);
};
return (
<div>
<TemperatureInput
scale="c"
temperature={temperature}
onTemperatureChange={handleChange} />
<TemperatureInput
scale="f"
temperature={temperature}
onTemperatureChange={handleChange} />
</div>
);
}
// 子组件:受控组件,通过 props 接收状态和回调
function TemperatureInput({ scale, temperature, onTemperatureChange }) {
const scaleName = scale === 'c' ? '摄氏' : '华氏';
return (
<fieldset>
<legend>{scaleName}温度</legend>
<input
value={temperature}
onChange={(e) => onTemperatureChange(e.target.value)} />
</fieldset>
);
}
✅ 状态只存在于父组件,子组件通过 props 读取,通过回调修改。
🔁 这样数据流形成一个清晰的闭环,调试如同“顺着管道查找”。