expo / router

[ARCHIVE]: Expo Router has moved to expo/expo -- The File-based router for universal React Native apps

Home Page:https://docs.expo.dev/routing/introduction/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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.Screens. See react-navigation/react-navigation#9090

Still not sure why this behavior showed up with SDK 49 specifically.

I wasn't able to reproduce all the screens were pushed as expected, with no popping.

Screenshot 2023-07-07 at 6 28 15 PM

@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

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

@snowdigital

Lifesaver!
I can go sleep now :D