当多个组件有相同的逻辑时,把逻辑抽成自定义 Hook。
function useAirConditioner(initialTemp = 26) {
const [isOn, setIsOn] = useState(false);
const [temp, setTemp] = useState(initialTemp);
const [mode, setMode] = useState('cool');
useEffect(() => {
if (temp > 28) setMode('cool');
if (temp < 18) setMode('heat');
}, [temp]);
return {
isOn, temp, mode,
turnOn: () => setIsOn(true),
turnOff: () => setIsOn(false),
setTemp,
};
}每个组件调用 useAirConditioner() 都会得到独立的状态。就像同一个型号的遥控器,客厅的和卧室的互不干扰。