Skip to content

Memoized Effect Dependencies

Error
small-rules/memoized-effect-dependencies

Flags effect dependencies that are not memoized. Unmemoized dependencies can cause unnecessary re-renders or infinite loops.

Diagnostic Messages

unmemoizedDependency
{{name}} is not memoized. Wrap it in useMemo/useCallback or move it to module scope.

Configuration

This rule accepts one options object after the severity.

environmentOptional

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

hooksOptional

Effect hooks checked by default; configured entries are added to this set.

modeOptional

Strictness for memoization detection: definite (only obvious), moderate (unknown calls and non-const), aggressive (any non-module).

{
"jsPlugins": [
"@pobammer-ts/small-rules"
],
"rules": {
"small-rules/memoized-effect-dependencies": [
"error",
{
"environment": "roblox-ts",
"hooks": [
{
"dependenciesIndex": 1,
"name": "useEffect"
},
{
"dependenciesIndex": 1,
"name": "useInsertionEffect"
},
{
"dependenciesIndex": 1,
"name": "useLayoutEffect"
}
],
"mode": "definite"
}
]
}
}

Examples

Unmemoized object effect dependency
import { useEffect } from "@rbxts/react";
function Component() {
const dep = {};
useEffect(() => {}, [dep]);
}
Memoized effect dependencies
import { useEffect, useMemo, useCallback } from "@rbxts/react";
function Component() {
const memo = useMemo(() => ({}), []);
const callback = useCallback(() => {}, []);
useEffect(() => {}, [memo, callback]);
}