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

Add StrictMode level prop and createRoot unstable_strictModeLevel option #20849

Merged

Commits on Feb 24, 2021

  1. The exported '<React.StrictMode>' tag remains the same and opts legac…

    …y subtrees into strict mode level one ('mode == StrictModeL1'). This mode enables DEV-only double rendering, double component lifecycles, string ref warnings, legacy context warnings, etc. The primary purpose of this mode is to help detected render phase side effects. No new behavior. Roots created with experimental 'createRoot' and 'createBlockingRoot' APIs will also (for now) continue to default to strict mode level 1.
    
    In a subsequent commit I will add support for a 'level' attribute on the '<React.StrictMode>' tag (as well as a new option supported by ). This will be the way to opt into strict mode level 2 ('mode == StrictModeL2'). This mode will enable DEV-only double invoking of effects on initial mount. This will simulate future Offscreen API semantics for trees being mounted, then hidden, and then shown again. The primary purpose of this mode is to enable applications to prepare for compatibility with the new Offscreen API (more information to follow shortly).
    
    For now, this commit changes no public facing behavior. The only mechanism for opting into strict mode level 2 is the pre-existing 'enableDoubleInvokingEffects' feature flag (only enabled within Facebook for now).
    Brian Vaughn committed Feb 24, 2021
    Configuration menu
    Copy the full SHA
    42f6a5e View commit details
    Browse the repository at this point in the history
  2. Renamed strict mode constants

    StrictModeL1 -> StrictLegacyMode and StrictModeL2 -> StrictEffectsMode
    Brian Vaughn committed Feb 24, 2021
    Configuration menu
    Copy the full SHA
    372bb8b View commit details
    Browse the repository at this point in the history
  3. Renamed tests

    Brian Vaughn committed Feb 24, 2021
    Configuration menu
    Copy the full SHA
    4d24e7b View commit details
    Browse the repository at this point in the history
  4. Split strict effects mode into two flags

    One flag ('enableStrictEffects') enables strict mode level 2. It is similar to 'debugRenderPhaseSideEffectsForStrictMode' which enables srtict mode level 1.
    
    The second flag ('createRootStrictEffectsByDefault') controls the default strict mode level for 'createRoot' trees. For now, all 'createRoot' trees remain level 1 by default. We will experiment with level 2 within Facebook.
    
    This is a prerequisite for adding a configurable option to 'createRoot' that enables choosing a different StrictMode level than the default.
    Brian Vaughn committed Feb 24, 2021
    Configuration menu
    Copy the full SHA
    a1d6475 View commit details
    Browse the repository at this point in the history
  5. Add StrictMode 'unstable_level' prop and createRoot 'unstable_strictM…

    …odeLevel' option
    
    New StrictMode 'unstable_level' prop allows specifying which level of strict mode to use. If no level attribute is specified, StrictLegacyMode will be used to maintain backwards compatibility. Otherwise the following is true:
    * Level 0 does nothing
    * Level 1 selects StrictLegacyMode
    * Level 2 selects StrictEffectsMode (which includes StrictLegacyMode)
    
    Levels can be increased with nesting (0 -> 1 -> 2) but not decreased.
    
    This commit also adds a new 'unstable_strictModeLevel' option to the createRoot and createBatchedRoot APIs. This option can be used to override default behavior to increase or decrease the StrictMode level of the root.
    
    A subsequent commit will add additional DEV warnings:
    * If a nested StrictMode tag attempts to explicitly decrease the level
    * If a level attribute changes in an update
    Brian Vaughn committed Feb 24, 2021
    Configuration menu
    Copy the full SHA
    2634f5a View commit details
    Browse the repository at this point in the history