Skip to content

Commit fc59e2a

Browse files
alxhubatscott
authored andcommittedSep 19, 2024·
feat(core): change effect() execution timing & no-op allowSignalWrites (#57874)
This commit flips the flag that was added in 4e890cc, putting the new effect timing into... effect :) BREAKING CHANGE: Generally this PR has two implications: * effects which are triggered outside of change detection run as part of the change detection process instead of as a microtask. Depending on the specifics of application/test setup, this can result in them executing earlier or later (or requiring additional test steps to trigger; see below examples). * effects which are triggered during change detection (e.g. by input signals) run _earlier_, before the component's template. We've seen a few common failure cases: * Tests which used to rely on the `Promise` timing of effects now need to `await whenStable()` or call `.detectChanges()` in order for effects to run. * Tests which use faked clocks may need to fast-forward/flush the clock to cause effects to run. * `effect()`s triggered during CD could rely on the application being fully rendered (for example, they could easily read computed styles, etc). With the change, they run before the component's updates and can get incorrect answers. The recent `afterRenderEffect()` API is a natural replacement for this style of effect. * `effect()`s which synchronize with the forms system are particularly timing-sensitive and might need to adjust their initialization timing. Fixes #55311 Fixes #55808 Fixes #55644 Fixes #56863 PR Close #57874
1 parent 49f7179 commit fc59e2a

File tree

1 file changed

+1
-1
lines changed
  • packages/core/src/render3/reactivity

1 file changed

+1
-1
lines changed
 

‎packages/core/src/render3/reactivity/patch.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,4 @@
99
/**
1010
* Controls whether effects use the legacy `microtaskEffect` by default.
1111
*/
12-
export const USE_MICROTASK_EFFECT_BY_DEFAULT = true;
12+
export const USE_MICROTASK_EFFECT_BY_DEFAULT = false;

0 commit comments

Comments
 (0)
Please sign in to comment.