tsxfunction ElectricBill({ rooms, pricePerKWh }) {
const totalBill = useMemo(() => {
console.log('重新计算电费...');
return rooms.reduce((sum, room) => {
return sum + room.runHours * room.power * pricePerKWh;
}, 0);
}, [rooms, pricePerKWh]);
return <div>总电费: ¥{totalBill}</div>;
}
function LivingRoom() {
const [temp, setTemp] = useState(26);
const handleTempChange = useCallback((newTemp) => {
setTemp(newTemp);
}, []);
return <RemoteControl onTempChange={handleTempChange} />;
}
|
useMemo |
useCallback |
| 缓存什么 |
计算结果 |
函数本身 |
| 类比 |
电费算过一次,没变就不重算 |
遥控器按钮逻辑没变,就不换新遥控器 |
| 什么时候用 |
计算量大 |
函数要传给子组件 |