mirror of
https://github.com/stablyai/orca.git
synced 2026-09-28 08:02:43 +00:00
fix(diff): move the post-render chain ref write out of render
React Doctor fails CI on a ref mutated during render. The ref exists so the onPostRender callback can stay identity-stable -- Pierre treats a new onPostRender as forceRender -- while still reading current consumers. useRef seeds the first render's chain and this effect, declared before the consumers' own effects, keeps it current without writing during render.
This commit is contained in:
@@ -174,13 +174,19 @@ export function PierreDiffSurface({
|
||||
shiftWheelPostRender,
|
||||
nativeViewPostRender
|
||||
})
|
||||
postRenderRef.current = {
|
||||
onPostRender,
|
||||
navigateToNote,
|
||||
searchPostRender,
|
||||
shiftWheelPostRender,
|
||||
nativeViewPostRender
|
||||
}
|
||||
// Why layout and not render: Pierre treats a new onPostRender identity as forceRender, so the
|
||||
// callback below must stay stable and read its chain from here. Writing during render is impure
|
||||
// -- React can discard that work. useRef seeds the first render's chain, and this effect is
|
||||
// declared before every consumer's own effects, so each Pierre post-render sees current values.
|
||||
useLayoutEffect(() => {
|
||||
postRenderRef.current = {
|
||||
onPostRender,
|
||||
navigateToNote,
|
||||
searchPostRender,
|
||||
shiftWheelPostRender,
|
||||
nativeViewPostRender
|
||||
}
|
||||
}, [onPostRender, navigateToNote, searchPostRender, shiftWheelPostRender, nativeViewPostRender])
|
||||
const handlePostRender = useCallback(
|
||||
(node: HTMLElement, instance: PierreDiffInstance, phase: PostRenderPhase) => {
|
||||
const chain = postRenderRef.current
|
||||
|
||||
Reference in New Issue
Block a user