Skip to content

Commit c776373

Browse files
committed
fix: untrack checkbox bubble input state snapshots
1 parent c4a3bc5 commit c776373

1 file changed

Lines changed: 8 additions & 5 deletions

File tree

packages/checkbox/src/index.tsx

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { mergeProps, prop, type FictNode, type JSX } from '@fictjs/runtime'
1+
import { mergeProps, prop, untrack, type FictNode, type JSX } from '@fictjs/runtime'
22
import { createSignal } from '@fictjs/runtime/advanced'
33

44
import { useComposedRefs, type PossibleRef } from '@fictjs/compose-refs'
@@ -166,8 +166,11 @@ function CheckboxProvider(props: ScopedProps<CheckboxProviderProps>): FictNode {
166166
...(props.onCheckedChange ? { onChange: props.onCheckedChange } : {}),
167167
}
168168
const [checked, setChecked] = useControllableState<CheckedState>(controllableStateProps)
169-
const initialDefaultChecked = normalizeChecked(checked())
170-
let previousBubbleChecked = checked()
169+
const updateChecked: SetStateFn<CheckedState> = (nextChecked) => {
170+
setChecked(nextChecked)
171+
}
172+
const initialDefaultChecked = normalizeChecked(untrack(() => checked()))
173+
let previousBubbleChecked = untrack(() => checked())
171174

172175
useLayoutEffect(() => {
173176
const currentControl = control()
@@ -210,7 +213,7 @@ function CheckboxProvider(props: ScopedProps<CheckboxProviderProps>): FictNode {
210213
name={name}
211214
required={required}
212215
setBubbleInput={bubbleInput}
213-
setChecked={setChecked}
216+
setChecked={updateChecked}
214217
setControl={control}
215218
value={value}
216219
>
@@ -227,7 +230,7 @@ function CheckboxTrigger(props: ScopedProps<CheckboxTriggerProps>): FictNode {
227230
const composedRefs = useComposedRefs(props.ref as PossibleRef<HTMLButtonElement>, (node) =>
228231
context.setControl(node),
229232
)
230-
const initialCheckedState = context.checked()
233+
const initialCheckedState = untrack(() => context.checked())
231234

232235
useLayoutEffect(() => {
233236
const formElement = context.control()?.form

0 commit comments

Comments
 (0)