Skip to content

Commit 7cc99e1

Browse files
committed
refactor(solid): compose refs
1 parent c80cfe4 commit 7cc99e1

File tree

1 file changed

+17
-12
lines changed

1 file changed

+17
-12
lines changed
Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,24 @@
1-
import { createEffect, createSignal, on } from 'solid-js'
1+
import { createEffect } from 'solid-js'
22

33
type PossibleRef<T> = T | ((el: T) => void) | undefined
44

55
const isRefFn = <T>(ref: PossibleRef<T>): ref is (el: T | null) => void => typeof ref === 'function'
66

7+
const setRefs = <T>(refs: PossibleRef<T>[], node: T | null) => {
8+
for (const ref of refs) {
9+
if (isRefFn(ref)) {
10+
ref(node)
11+
}
12+
}
13+
}
14+
715
export function composeRefs<T>(...refs: PossibleRef<T>[]) {
8-
const [node, setNode] = createSignal<T | null>(null)
9-
createEffect(
10-
on(node, (el) => {
11-
for (const ref of refs) {
12-
if (isRefFn(ref)) {
13-
ref(el)
14-
}
15-
}
16-
}),
17-
)
18-
return setNode
16+
let node: T | null = null
17+
createEffect(() => {
18+
setRefs(refs, node)
19+
})
20+
return (el: T) => {
21+
node = el
22+
setRefs(refs, el)
23+
}
1924
}

0 commit comments

Comments
 (0)