@@ -1144,27 +1144,30 @@ export function useToggle(initialValue) {
1144
1144
return [ on , handleToggle ] ;
1145
1145
}
1146
1146
1147
- export function useVisibilityChange ( ) {
1148
- const [ documentVisible , setDocumentVisibility ] = React . useState ( true ) ;
1147
+ const useVisibilityChangeSubscribe = ( callback ) => {
1148
+ document . addEventListener ( "visibilitychange" , callback ) ;
1149
1149
1150
- React . useEffect ( ( ) => {
1151
- const handleChange = ( ) => {
1152
- if ( document . visibilityState !== "visible" ) {
1153
- setDocumentVisibility ( false ) ;
1154
- } else {
1155
- setDocumentVisibility ( true ) ;
1156
- }
1157
- } ;
1158
- handleChange ( ) ;
1150
+ return ( ) => {
1151
+ document . removeEventListener ( "visibilitychange" , callback ) ;
1152
+ } ;
1153
+ } ;
1159
1154
1160
- document . addEventListener ( "visibilitychange" , handleChange ) ;
1155
+ const getVisibilityChangeSnapshot = ( ) => {
1156
+ return document . visibilityState ;
1157
+ } ;
1161
1158
1162
- return ( ) => {
1163
- document . removeEventListener ( "visibilitychange" , handleChange ) ;
1164
- } ;
1165
- } , [ ] ) ;
1159
+ const getVisibilityChangeServerSnapshot = ( ) => {
1160
+ throw Error ( "useVisibilityChange is a client-only hook" ) ;
1161
+ } ;
1162
+
1163
+ export function useVisibilityChange ( ) {
1164
+ const visibilityState = React . useSyncExternalStore (
1165
+ useVisibilityChangeSubscribe ,
1166
+ getVisibilityChangeSnapshot ,
1167
+ getVisibilityChangeServerSnapshot
1168
+ ) ;
1166
1169
1167
- return documentVisible ;
1170
+ return visibilityState === "visible" ;
1168
1171
}
1169
1172
1170
1173
export function useWindowScroll ( ) {
0 commit comments