-
Notifications
You must be signed in to change notification settings - Fork 24.8k
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
fix(core): render hooks should not specifically run outside the Angul… #55399
Closed
Conversation
This file contains 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
…ar zone The timing of render hook execution is almost entirely identical to `ngZone.onMicrotaskEmpty`. Developers working towards zoneless compatibility will need to migrate `onMicrotaskEmpty` calls to use `afterNextRender`/`afterRender` instead. This, however, would lead to confusing issues if there are promises in the callbacks because `onMicrotaskEmpty` emits inside the Angular zone while render hooks execute outside today. This is problematic because it's not documented and does not produce any notification or error message when async work is done inside the hooks that requires change detection. Instead, change detection simply does not run, and this behavior has proven to be surprising to developers who are used to ZoneJS change detection behavior. fixes angular#55299
pkozlowski-opensource
approved these changes
Apr 18, 2024
AndrewKushnir
added
target: rc
This PR is targeted for the next release-candidate
area: core
Issues related to the framework runtime
and removed
target: patch
This PR is targeted for the next patch release
labels
Apr 25, 2024
AndrewKushnir
added
target: patch
This PR is targeted for the next patch release
and removed
target: rc
This PR is targeted for the next release-candidate
labels
Apr 25, 2024
This PR was merged into the repository by commit 7e89753. |
AndrewKushnir
pushed a commit
that referenced
this pull request
Apr 25, 2024
…ar zone (#55399) The timing of render hook execution is almost entirely identical to `ngZone.onMicrotaskEmpty`. Developers working towards zoneless compatibility will need to migrate `onMicrotaskEmpty` calls to use `afterNextRender`/`afterRender` instead. This, however, would lead to confusing issues if there are promises in the callbacks because `onMicrotaskEmpty` emits inside the Angular zone while render hooks execute outside today. This is problematic because it's not documented and does not produce any notification or error message when async work is done inside the hooks that requires change detection. Instead, change detection simply does not run, and this behavior has proven to be surprising to developers who are used to ZoneJS change detection behavior. fixes #55299 PR Close #55399
AndrewKushnir
pushed a commit
that referenced
this pull request
Apr 25, 2024
…ar zone (#55399) The timing of render hook execution is almost entirely identical to `ngZone.onMicrotaskEmpty`. Developers working towards zoneless compatibility will need to migrate `onMicrotaskEmpty` calls to use `afterNextRender`/`afterRender` instead. This, however, would lead to confusing issues if there are promises in the callbacks because `onMicrotaskEmpty` emits inside the Angular zone while render hooks execute outside today. This is problematic because it's not documented and does not produce any notification or error message when async work is done inside the hooks that requires change detection. Instead, change detection simply does not run, and this behavior has proven to be surprising to developers who are used to ZoneJS change detection behavior. fixes #55299 PR Close #55399
atscott
added a commit
to atscott/angular
that referenced
this pull request
May 1, 2024
…he Angular zone (angular#55399)" This reverts commit 7e89753. Running render hooks inside the zone is specifically problematic for `afterRender` hooks. If the callback has async task, it would cause an infinite change detection. In addition, updating state in render hooks is generally discourages and certainly should update state in a way that notifies Angular of the change (either via signal or with `markForCheck`) rather than relying on ZoneJS to pick it up (which would only work if the change is done inside an async task).
AndrewKushnir
pushed a commit
that referenced
this pull request
May 2, 2024
…he Angular zone (#55399)" (#55624) This reverts commit 7e89753. Running render hooks inside the zone is specifically problematic for `afterRender` hooks. If the callback has async task, it would cause an infinite change detection. In addition, updating state in render hooks is generally discourages and certainly should update state in a way that notifies Angular of the change (either via signal or with `markForCheck`) rather than relying on ZoneJS to pick it up (which would only work if the change is done inside an async task). PR Close #55624
AndrewKushnir
pushed a commit
that referenced
this pull request
May 2, 2024
…he Angular zone (#55399)" (#55624) This reverts commit 7e89753. Running render hooks inside the zone is specifically problematic for `afterRender` hooks. If the callback has async task, it would cause an infinite change detection. In addition, updating state in render hooks is generally discourages and certainly should update state in a way that notifies Angular of the change (either via signal or with `markForCheck`) rather than relying on ZoneJS to pick it up (which would only work if the change is done inside an async task). PR Close #55624
AndrewKushnir
pushed a commit
that referenced
this pull request
May 2, 2024
…he Angular zone (#55399)" (#55624) This reverts commit 7e89753. Running render hooks inside the zone is specifically problematic for `afterRender` hooks. If the callback has async task, it would cause an infinite change detection. In addition, updating state in render hooks is generally discourages and certainly should update state in a way that notifies Angular of the change (either via signal or with `markForCheck`) rather than relying on ZoneJS to pick it up (which would only work if the change is done inside an async task). PR Close #55624
This was referenced May 22, 2024
This was referenced May 23, 2024
This issue has been automatically locked due to inactivity. Read more about our automatic conversation locking policy. This action has been performed automatically by a bot. |
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Labels
action: merge
The PR is ready for merge by the caretaker
area: core
Issues related to the framework runtime
target: patch
This PR is targeted for the next patch release
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.
…ar zone
The timing of render hook execution is almost entirely identical to
ngZone.onMicrotaskEmpty
. Developers working towards zoneless compatibility will need to migrateonMicrotaskEmpty
calls to useafterNextRender
/afterRender
instead. This, however, would lead to confusing issues if there are promises in the callbacks becauseonMicrotaskEmpty
emits inside the Angular zone while render hooks execute outside today. This is problematic because it's not documented and does not produce any notification or error message when async work is done inside the hooks that requires change detection. Instead, change detection simply does not run, and this behavior has proven to be surprising to developers who are used to ZoneJS change detection behavior.fixes #55299