You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Send the onAppear action to the ViewStore inside .onAppear(perform:) modifier in each view.
In each of the reducers, just return .none effect when onAppear action is received.
Run the app and randomly switch tabs.
Expected behavior
Whenever tab is switched, onAppear action of the currently selected tab's component should be received.
Actual behavior
Sometimes wrong onAppear action is received, for example when switching from "Color" to "Shape" tab, instead of single ShapeAction.onAppear, two actions are received: ShapeAction.onAppear and then PreviewAction.onAppear.
Testing notes
The issue occurs only when action is sent to the ViewStore in .onAppear(perform:) modifier. When not sending the action in the closure (but for example just printing something to the console) - everything is working as expected.
The text was updated successfully, but these errors were encountered:
This is a strange issue indeed. It's hard to tell if this is a bug in SwiftUI or a problem with ComposableArchitecture. It seems to be only reproducible when action is sent inside .onAppear(perform:) modifier.
As a workaround (which I can confirm solves the problem) we can move .onAppear(perform:) from the body of a view presented in a tab to the place where it's created. It's not an ideal solution, though. I applied the workaround in #3 in this commit: 48e36d1.
darrarski
changed the title
Duplicated/invalid actions are received when tab views appears
Duplicated/invalid actions are received when tab view appear
Apr 12, 2021
Description
Reported by @saroar in a comment to another issue.
Steps to reproduce
onAppear
actions to each component.onAppear
action to theViewStore
inside.onAppear(perform:)
modifier in each view..none
effect whenonAppear
action is received.Expected behavior
onAppear
action of the currently selected tab's component should be received.Actual behavior
onAppear
action is received, for example when switching from "Color" to "Shape" tab, instead of singleShapeAction.onAppear
, two actions are received:ShapeAction.onAppear
and thenPreviewAction.onAppear
.Testing notes
The issue occurs only when action is sent to the
ViewStore
in.onAppear(perform:)
modifier. When not sending the action in the closure (but for example just printing something to the console) - everything is working as expected.The text was updated successfully, but these errors were encountered: