Skip to content

Commit fd4669f

Browse files
authored
Rely on initial state of Transition component (#882)
The `useId` hook causes a re-render in TransitionChild immediately after mount which triggers a transition by `initial` being false in the second re-render regardless of how `appear` was set.
1 parent 9f638c9 commit fd4669f

File tree

1 file changed

+3
-3
lines changed

1 file changed

+3
-3
lines changed

packages/@headlessui-react/src/components/transitions/transition.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ function useSplitClasses(classes: string = '') {
3636
interface TransitionContextValues {
3737
show: boolean
3838
appear: boolean
39+
initial: boolean
3940
}
4041
let TransitionContext = createContext<TransitionContextValues | null>(null)
4142
TransitionContext.displayName = 'TransitionContext'
@@ -213,10 +214,9 @@ function TransitionChild<TTag extends ElementType = typeof DEFAULT_TRANSITION_CH
213214
let [state, setState] = useState(TreeStates.Visible)
214215
let strategy = rest.unmount ? RenderStrategy.Unmount : RenderStrategy.Hidden
215216

216-
let { show, appear } = useTransitionContext()
217+
let { show, appear, initial } = useTransitionContext()
217218
let { register, unregister } = useParentNesting()
218219

219-
let initial = useIsInitialRender()
220220
let id = useId()
221221

222222
let isTransitioning = useRef(false)
@@ -371,7 +371,7 @@ export function Transition<TTag extends ElementType = typeof DEFAULT_TRANSITION_
371371

372372
let initial = useIsInitialRender()
373373
let transitionBag = useMemo<TransitionContextValues>(
374-
() => ({ show: show as boolean, appear: appear || !initial }),
374+
() => ({ show: show as boolean, appear: appear || !initial, initial }),
375375
[show, appear, initial]
376376
)
377377

0 commit comments

Comments
 (0)