Skip to content

require-named-effect-functions

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]);
OptionTypeDefault
environment"roblox-ts" | "standard""roblox-ts"
hooksArray<{ name: string; allowAsync: boolean }>[{ name: "useEffect", allowAsync: false }, { name: "useLayoutEffect", allowAsync: false }, { name: "useInsertionEffect", allowAsync: false }]

Example config:

import ceaseNonsense from "eslint-plugin-cease-nonsense";
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 },
],
},
],
},
},
];