Skip to content

No Useless Use Memo

Suggestion
small-rules/no-useless-use-memo

Disallow useMemo calls that only wrap values static enough to live at module scope.

Diagnostic Messages

uselessUseMemo
useMemo is wrapping a static value. Move the value to module scope instead of paying hook overhead for no runtime benefit.

Configuration

This rule accepts one options object after the severity.

dependencyModeOptional

Dependency-array mode used to decide whether a memoized value is static.

environmentOptional

The React environment: 'roblox-ts' uses @rbxts/react, 'standard' uses react.

staticGlobalFactoriesOptional

Global constructors and factories whose calls are treated as static values.

{
"jsPlugins": [
"@pobammer-ts/small-rules"
],
"rules": {
"small-rules/no-useless-use-memo": [
"error",
{
"dependencyMode": "non-updating",
"environment": "roblox-ts",
"staticGlobalFactories": [
"Axes",
"BrickColor",
"CFrame",
"Color3",
"ColorSequence",
"ColorSequenceKeypoint",
"DateTime",
"Enum",
"Faces",
"NumberRange",
"NumberSequence",
"NumberSequenceKeypoint",
"PathWaypoint",
"PhysicalProperties",
"Ray",
"Rect",
"Region3",
"Region3int16",
"TweenInfo",
"UDim",
"UDim2",
"Vector2",
"Vector3",
"Vector3int16",
"Vector3int32"
]
}
]
}
}

Examples

Memoized constant computation
import { useMemo } from "react";
const value = useMemo(() => {
return 1;
}, []);
Memoized theme-dependent value
import { useMemo } from "react";
import { AnimationLibrary, SpringConfiguration, getAnimationConfiguration } from "./animation-config";
function Component({ theme }) {
const value = useMemo(() => getAnimationConfiguration(theme, AnimationLibrary.ReactSpring), [theme]);
return value;
}