File tree 2 files changed +22
-26
lines changed
2 files changed +22
-26
lines changed Original file line number Diff line number Diff line change 1
- import { useEffect , useState } from 'react' ;
1
+ import { useSyncExternalStore } from 'react' ;
2
2
3
3
export const useOffline = ( ) => {
4
- const [ offline , setOffline ] = useState ( null ) ;
4
+ const getSnapshot = ( ) => ! navigator . onLine ;
5
5
6
- useEffect ( ( ) => {
7
- const handleNetworkState = ( ) => {
8
- setOffline ( ! offline ) ;
9
- } ;
10
- addEventListener ( 'offline' , handleNetworkState ) ;
11
- addEventListener ( 'online' , handleNetworkState ) ;
6
+ const subscribe = ( callback ) => {
7
+ const handleNetworkChange = ( ) => callback ( ) ;
8
+
9
+ window . addEventListener ( 'online' , handleNetworkChange ) ;
10
+ window . addEventListener ( 'offline' , handleNetworkChange ) ;
12
11
13
12
return ( ) => {
14
- removeEventListener ( 'online' , handleNetworkState ) ;
15
- removeEventListener ( 'offline' , handleNetworkState ) ;
13
+ window . removeEventListener ( 'online' , handleNetworkChange ) ;
14
+ window . removeEventListener ( 'offline' , handleNetworkChange ) ;
16
15
} ;
17
- } , [ offline ] ) ;
16
+ } ;
18
17
19
- return ! ! offline ;
18
+ return useSyncExternalStore ( subscribe , getSnapshot ) ;
20
19
} ;
Original file line number Diff line number Diff line change 1
- import { useEffect , useState } from 'react' ;
1
+ import { useSyncExternalStore } from 'react' ;
2
2
3
- type TUseOffline = ( ) => boolean ;
3
+ export const useOffline = ( ) => {
4
+ const getSnapshot = ( ) => ! navigator . onLine ;
4
5
5
- export const useOffline : TUseOffline = ( ) => {
6
- const [ offline , setOffline ] = useState < boolean | null > ( null ) ;
6
+ const subscribe = ( callback : ( ) => void ) => {
7
+ const handleNetworkChange = ( ) => callback ( ) ;
7
8
8
- useEffect ( ( ) => {
9
- const handleNetworkState = ( ) => {
10
- setOffline ( ! offline ) ;
11
- } ;
12
- addEventListener ( 'offline' , handleNetworkState ) ;
13
- addEventListener ( 'online' , handleNetworkState ) ;
9
+ window . addEventListener ( 'online' , handleNetworkChange ) ;
10
+ window . addEventListener ( 'offline' , handleNetworkChange ) ;
14
11
15
12
return ( ) => {
16
- removeEventListener ( 'online' , handleNetworkState ) ;
17
- removeEventListener ( 'offline' , handleNetworkState ) ;
13
+ window . removeEventListener ( 'online' , handleNetworkChange ) ;
14
+ window . removeEventListener ( 'offline' , handleNetworkChange ) ;
18
15
} ;
19
- } , [ offline ] ) ;
16
+ } ;
20
17
21
- return ! ! offline ;
18
+ return useSyncExternalStore ( subscribe , getSnapshot ) ;
22
19
} ;
You can’t perform that action at this time.
0 commit comments