Skip to content

Commit f73909e

Browse files
committed
Add todo test for derived state via useCallback setter
1 parent c5dcd47 commit f73909e

File tree

1 file changed

+49
-1
lines changed

1 file changed

+49
-1
lines changed

test/deriving-state.test.js

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,27 @@ new MyRuleTester().run("/deriving-state", {
274274
}
275275
`,
276276
},
277-
// TODO: Above function tests but with `useCallback`
277+
{
278+
name: "From external state via useCallback derived setter",
279+
code: js`
280+
import { getPrefixFor } from 'library';
281+
import { useState } from 'react';
282+
283+
function Component() {
284+
const [name, setName] = useState();
285+
const [prefixedName, setPrefixedName] = useState();
286+
const prefix = getPrefixFor(name);
287+
288+
const derivedSetter = useCallback((name) => {
289+
setPrefixedName(prefix + name);
290+
}, [prefix]);
291+
292+
useEffect(() => {
293+
derivedSetter(name);
294+
}, [name, derivedSetter])
295+
}
296+
`,
297+
},
278298
],
279299
invalid: [
280300
{
@@ -547,6 +567,34 @@ new MyRuleTester().run("/deriving-state", {
547567
},
548568
],
549569
},
570+
{
571+
name: "From internal state via useCallback derived setter",
572+
todo: true,
573+
code: js`
574+
import { getPrefixFor } from 'library';
575+
import { useState } from 'react';
576+
577+
function Component() {
578+
const [name, setName] = useState();
579+
const [prefixedName, setPrefixedName] = useState();
580+
const prefix = 'Dr. ';
581+
582+
const derivedSetter = useCallback((name) => {
583+
setPrefixedName(prefix + name);
584+
}, [prefix]);
585+
586+
useEffect(() => {
587+
derivedSetter(name);
588+
}, [name, derivedSetter]);
589+
}
590+
`,
591+
errors: [
592+
{
593+
messageId: messageIds.avoidDerivedState,
594+
data: { state: "prefixedName" },
595+
},
596+
],
597+
},
550598
{
551599
name: "Partially update complex state from props",
552600
code: js`

0 commit comments

Comments
 (0)