Skip to content

require-named-effect-functions

error

Requires named functions for effect-like hooks.

By default, the rule checks useEffect, useLayoutEffect, and useInsertionEffect.

It reports inline arrow functions, anonymous function expressions, identifiers that point to arrow functions, and identifiers that come from useCallback or useMemo. It also reports async effect callbacks unless the matched hook is configured with allowAsync: true.

In roblox-ts mode, named function expressions are also rejected. In standard mode, named function expressions are allowed.

Incorrect
useEffect(() => {
fetchData();
}, [id]);
const runEffect = () => {
fetchData();
};
useLayoutEffect(runEffect, [id]);
Correct
function syncUser() {
fetchData();
}
useEffect(syncUser, [id]);
Option Type Default
environment "roblox-ts" | "standard" "roblox-ts"
hooks Array<{ name: string; allowAsync: boolean }> [{ name: "useEffect", allowAsync: false }, { name: "useLayoutEffect", allowAsync: false }, { name: "useInsertionEffect", allowAsync: false }]

Example config:

import ceaseNonsense from "@pobammer-ts/eslint-cease-nonsense-rules";
export default [
{
plugins: {
"cease-nonsense": ceaseNonsense,
},
rules: {
"cease-nonsense/require-named-effect-functions": [
"error",
{
environment: "standard",
hooks: [
{ name: "useEffect", allowAsync: false },
{ name: "useLayoutEffect", allowAsync: false },
{ name: "useInsertionEffect", allowAsync: false },
{ name: "useMyEffect", allowAsync: true },
],
},
],
},
},
];