1
- import React , { PropsWithChildren , useEffect , useRef } from 'react' ;
1
+ import React , { PropsWithChildren , useEffect , useState } from 'react' ;
2
2
3
3
import { ParallaxContext } from '../../context/ParallaxContext' ;
4
4
import { ScrollAxis } from 'parallax-controller' ;
@@ -8,41 +8,44 @@ import { createController } from './helpers';
8
8
export function ParallaxProvider (
9
9
props : PropsWithChildren < ParallaxProviderProps >
10
10
) {
11
- const controller = useRef (
11
+ const [ controller ] = useState (
12
12
createController ( {
13
13
scrollAxis : props . scrollAxis || ScrollAxis . vertical ,
14
14
scrollContainer : props . scrollContainer ,
15
15
disabled : props . isDisabled ,
16
16
} )
17
17
) ;
18
-
19
18
// update scroll container
20
19
useEffect ( ( ) => {
21
- if ( props . scrollContainer && controller . current ) {
22
- controller . current . updateScrollContainer ( props . scrollContainer ) ;
20
+ if ( props . scrollContainer && controller ) {
21
+ controller . updateScrollContainer ( props . scrollContainer ) ;
23
22
}
24
- } , [ props . scrollContainer , controller . current ] ) ;
23
+ } , [ props . scrollContainer , controller ] ) ;
25
24
26
25
// disable/enable parallax
27
26
useEffect ( ( ) => {
28
- if ( props . isDisabled && controller . current ) {
29
- controller . current . disableParallaxController ( ) ;
27
+ if ( props . isDisabled && controller ) {
28
+ controller . disableParallaxController ( ) ;
30
29
}
31
- if ( ! props . isDisabled && controller . current ) {
32
- controller . current . enableParallaxController ( ) ;
30
+ if ( ! props . isDisabled && controller ) {
31
+ controller . enableParallaxController ( ) ;
33
32
}
34
- } , [ props . isDisabled , controller . current ] ) ;
33
+ } , [ props . isDisabled , controller ] ) ;
35
34
36
- // remove the controller when unmounting
35
+ // enable and disable parallax controller on mount/unmount
37
36
useEffect ( ( ) => {
37
+ // Enable it on mount
38
+ if ( ! props . isDisabled && controller ) {
39
+ controller && controller ?. enableParallaxController ( ) ;
40
+ }
38
41
return ( ) => {
39
- controller ?. current && controller ?. current . destroy ( ) ;
40
- controller . current = null ;
42
+ // Disable it on unmount
43
+ controller && controller ?. disableParallaxController ( ) ;
41
44
} ;
42
45
} , [ ] ) ;
43
46
44
47
return (
45
- < ParallaxContext . Provider value = { controller . current } >
48
+ < ParallaxContext . Provider value = { controller } >
46
49
{ props . children }
47
50
</ ParallaxContext . Provider >
48
51
) ;
0 commit comments