Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Fiber][Float] Error when a host fiber changes "flavor" #29693

Merged
merged 1 commit into from
Jun 3, 2024

Commits on May 31, 2024

  1. [Fiber][Float] Error when a host fiber changes "flavor"

    Host Components can exist as four semantic types
    
    1. regular Components (Vanilla)
    2. singleton Components
    2. hoistable components
    3. resources
    
    Each of these component types have their own rules related to mounting and reconciliation however they are not direclty modeled as their own unique fiber type. This is partly for code size but also because reconciling the inner type of these components would be in a very hot path in fiber creation and reconciliation and it's just not practical to do this logic check here.
    
    Right now we have three Fiber types used to implement these 4 concepts but we probably need to reconsider the model and think of Host Components as a single fiber type with an inner implementation. Once we do this we can regularize things like transitioning between a resource and a regular component or a singleton and a hoistable instance. The cases where these transitions happen today aren't particularly common but they can be observed and currently the handling of these transitions is incmplete at best and buggy at worst. The most egregious case is the link type. This can be a regular component (stylesheet without precedence) a hositable component (non stylesheet link tags) or a resource (stylesheet with a precedence) and if you have a single jsx slot that tries to reconcile transitions between these types it just doesn't work well.
    
    This commit adds an error for when a Hoistable goes from Instance to Resource. This is the most urgent because it is the easiest to hit but doesn't add much overhead in hot paths
    
    detecting type shifting to and from regular components is harder to do efficiently because we don't want to reevaluate the type on every update for host components which is currently not required and would add overhead to a very hot path
    
    singletons can't really type shift in their one practical implementation (DOM) so they are only a problem in theroy not practice
    gnoff committed May 31, 2024
    Configuration menu
    Copy the full SHA
    82a61ff View commit details
    Browse the repository at this point in the history