
规则:use-memo
ReactAPI 参考:ESLint 插件
规则:use-memo
校验 useMemo hook 必须与返回值一起使用。参见 useMemo 文档 了解更多信息。
规则详情
useMemo 用于计算和缓存昂贵的值,而不是用于副作用。没有返回值,useMemo 返回 undefined,这违背了其目的,并且可能表明你使用了错误的 hook。
无效
此规则的不正确代码示例:
-
js
// ❌ No return value
function Component({ data }) {
const processed = useMemo(() => {
data.forEach(item => console.log(item));
// Missing return!
}, [data]);
return <div>{processed}</div>; // Always undefined
}
有效
此规则的正确代码示例:
js
// ✅ Returns computed value
function Component({ data }) {
const processed = useMemo(() => {
return data.map(item => item * 2);
}, [data]);
return <div>{processed}</div>;
}
故障排查
我需要在依赖项更改时运行副作用
你可能会尝试使用 useMemo 来执行副作用:
-
js
// ❌ Wrong: Side effects in useMemo
function Component({user}) {
// No return value, just side effect
useMemo(() => {
analytics.track('UserViewed', {userId: user.id});
}, [user.id]);
// Not assigned to a variable
useMemo(() => {
return analytics.track('UserViewed', {userId: user.id});
}, [user.id]);
}
如果副作用需要在响应用户交互时发生,最好将副作用与事件放在一起:
js
// ✅ Good: Side effects in event handlers
function Component({user}) {
const handleClick = () => {
analytics.track('ButtonClicked', {userId: user.id});
// Other click logic...
};
return <button onClick={handleClick}>Click me</button>;
}
如果副作用将 React state 与某些外部 state 同步(反之亦然),使用 useEffect:
js
// ✅ Good: Synchronization in useEffect
function Component({theme}) {
useEffect(() => {
localStorage.setItem('preferredTheme', theme);
document.body.className = theme;
}, [theme]);
return <div>Current theme: {theme}</div>;
}
帮助我们改进文档
发现翻译问题或内容错误?请告诉我们。
