很多 React 新手一学会 useEffect,就开始“凡事都往里塞”。
但 React 官方现在反复强调一件事:
如果某件事可以在渲染时直接算出来,就不要用 Effect。
function Bill({ temp, price }) {
const [cost, setCost] = useState(0);
useEffect(() => {
setCost(temp * price);
}, [temp, price]);
return <div>{cost}</div>;
}上面其实多绕了一圈。直接写:
function Bill({ temp, price }) {
const cost = temp * price;
return <div>{cost}</div>;
}什么时候真的该用 Effect?
当你要和 React 外部世界同步时:
- 请求接口
- 订阅事件
- 操作 DOM
- 开定时器
- 连 WebSocket一句话记忆:
Effect 不是“补丁区”,它是“和外部世界接线的地方”。