enableFreeze cause useIsFocused stop working
See original GitHub issueDescription
In bottom tabs, when enabling enableFreeze
, useIsFocused
is not triggered when screen blur.
Screenshots
Steps To Reproduce
- Create tabs with 2 screens
Home
andSettings
- In
Settings
, addconst isFocused = useIsFocused()
- Navigate to
Settings
screen,isFocused
updated totrue
(this is correct) - Navigate back to
Home
,isFocused
stilltrue
Expected behavior
At step 4, isFocused
in Settings
should be false
Actual behavior
At step 4, isFocused
in Settings
is true
Reproduction
Platform
I just checked on iOS, not sure about other platforms
- iOS
- Android
- Web
- Windows
- tvOS
Workflow
- Managed workflow
- Bare workflow
Package versions
package | version |
---|---|
react-native | 0.66.1 |
@react-navigation/native | 6.0.6 |
@react-navigation/native-stack | 6.2.5 |
@react-navigation/bottom-tabs | 6.0.9 |
react-native-screens | 3.9.0 |
Issue Analytics
- State:
- Created 2 years ago
- Reactions:2
- Comments:16 (4 by maintainers)
Top Results From Across the Web
useIsFocused - React Navigation
The library exports a useIsFocused hook to make this easier: ... This might cause lags during the animation if your screen is heavy....
Read more >Why is my tab re-rendering (i'm using useEffect on ... - Reddit
I think the tabs are different component, so you can check it out useIsFocused() from react-navigation. const isFocused = useIsFocused();. then ...
Read more >React-Navigation useIsFocused always returns true, and I can ...
I have pretty simple use case for this, Basically if the screen is focused I want this function to run, if not don't...
Read more >react-native-screens - npm
This project aims to expose native navigation container components to React Native. It is not designed to be used as a standalone library ......
Read more >react-native-screens - bytemeta
enableFreeze cause useIsFocused stop working ... detachInactiveScreens={true} cause onScroll of previous tab screen triggered in react navigation v6 bottom ...
Read more >
Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free
Top Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found
Hi @Titozzz, @r0b0t3d, @nandorojo, @marhaupe, and @tomasmozeris
Thank you so much for participating in this discussion. It helped a lot!
I think we’ve finally figured out how to overcome this issue and the solution is quite simple. We disable freeze for the first render so the
useIsFocused
can correctly pick up that screens have changed.Could you guys confirm the solution works by testing the code in your app eg. by installing
react-native-screens
directly from the branchor swapping the whole
index.native.tsx
file in yournode_modules/react-native-screens
?That would be amazing! 🙌 Thanks!
Looking at that code for the delayed freeze, it’s actually not concurrent safe (executing side effects in a render function, that could get thrown away). A more proper fix would be something like this:
FWIW: This does fix the problem for us with Native Stacks and useIsFocused firing properly