Repository navigation
fix(props): assign ref before mounting children - #70
Merged
bigmistqke merged 1 commit intoJun 6, 2026
Merged
bigmistqke merged 1 commit into
bigmistqke merged 1 commit into
Conversation
useProps assigned the element's ref in a createRenderEffect that ran after useSceneGraph had already resolved and mounted the children. A child reading the parent's ref in a reactive binding therefore saw undefined on its first run and never updated — a divergence from Solid DOM, which assigns refs before inserting children. Move the ref assignment ahead of useSceneGraph so it lands before children mount, and add a test covering a child that reads the parent's ref during its own render.
commit: |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
usePropsassigned an element'srefin acreateRenderEffectthat ran afteruseSceneGraphhad already resolved and mounted the element's children. So a child reading the parent's ref in a reactive binding sawundefinedon its first run and — since a plainletref isn't reactive — never updated. This diverges from Solid DOM, which assigns refs before inserting children.The fix moves the ref assignment ahead of
useSceneGraph, so it lands before children mount.Repro: a descendant binding that reads an ancestor's ref (e.g. a material
colorkeyed off the parent mesh's ref) stays stuck at its initial value; the plain-Solid-DOM equivalent works.Test:
tests/core/ref-timing.test.tsx— "a child sees the parent's ref during its own render" (fails before, passes after).