Stack Navigator Goes Back to Previous Screen if Route Matches, Even if Params Are Different on v2
Nicell opened this issue · comments
Which package manager are you using? (Yarn is recommended)
yarn
Summary
As of SDK 49 and expo-router v2, when a stack has links pressed on in the following order:
/Nick
(/[user]
)/two
(/two
)/Joe
(/[user]
)
The stack navigator goes back to the /Nick
screen when the /Joe
link is pressed on the /two
page instead of pushing a new screen onto the stack. This behavior does not happen before upgrading. While it does update the params, I was not expecting search params to update for screens, so my app doesn't handle it, and I don't want it to reuse screens. Continually pushing on the stack is better for my app's UX, and I'm not sure if it's achievable with the new update.
Minimal reproducible example
https://github.com/Nicell/stack-test
This repo is built on the tabs@49 template. The 2nd commit is just applied on top of it.
I was able to create a workaround by setting the getId
prop on the Stack.Screen
s. See react-navigation/react-navigation#9090
Still not sure why this behavior showed up with SDK 49 specifically.
@EvanBacon Here's a video of my minimal reproducible example in the latest Expo Go on an iPhone simulator. All I did was yarn start, open on the simulator, and press each link.
Simulator.Screen.Recording.-.iPhone.14.Pro.-.2023-07-07.at.20.37.27.mp4
![image](https://user-images.githubusercontent.com/9439650/251886241-d7c85875-f437-482c-8989-811ebe39d0cd.png)
for those who facing the same issue use following code
<Stack.Screen getId={({ params }) => params.id} name="user/[id]" />
getID function makes it work
dont forget to spread params
Lifesaver!
I can go sleep now :D