File tree 2 files changed +34
-1
lines changed
2 files changed +34
-1
lines changed Original file line number Diff line number Diff line change @@ -32,6 +32,8 @@ class NativeSvg extends Component<IContentLoaderProps> {
32
32
33
33
idGradient = `${ this . fixedId } -animated-diff`
34
34
35
+ unmounted = false
36
+
35
37
setAnimation = ( ) => {
36
38
// props.speed is in seconds as it is compatible with web
37
39
// convert to milliseconds
@@ -44,7 +46,7 @@ class NativeSvg extends Component<IContentLoaderProps> {
44
46
duration : durMs ,
45
47
useNativeDriver : true ,
46
48
} ) . start ( ( ) => {
47
- if ( this . props . animate ) {
49
+ if ( ! this . unmounted && this . props . animate ) {
48
50
this . animatedValue . setValue ( - 1 )
49
51
this . setAnimation ( )
50
52
}
@@ -63,6 +65,10 @@ class NativeSvg extends Component<IContentLoaderProps> {
63
65
}
64
66
}
65
67
68
+ componentWillUnmount ( ) {
69
+ this . unmounted = true
70
+ }
71
+
66
72
render ( ) {
67
73
const {
68
74
children,
Original file line number Diff line number Diff line change 1
1
import * as React from 'react'
2
+ import { Animated } from 'react-native'
2
3
import * as renderer from 'react-test-renderer'
3
4
import * as ShallowRenderer from 'react-test-renderer/shallow'
4
5
@@ -121,4 +122,30 @@ describe('ContentLoader', () => {
121
122
expect ( propsFromFullField . rtl ) . toBe ( true )
122
123
} )
123
124
} )
125
+
126
+ describe ( 'when using SVG' , ( ) => {
127
+ describe ( 'cleanup' , ( ) => {
128
+ afterAll ( ( ) => {
129
+ jest . useRealTimers ( )
130
+ } )
131
+
132
+ it ( 'cleans up animations when unmounted' , ( ) => {
133
+ jest . useFakeTimers ( )
134
+ const animationSpy = jest . spyOn ( Animated , 'timing' )
135
+
136
+ const mockSpeed = 10
137
+ const { unmount } = renderer . create (
138
+ < ContentLoader animate = { true } height = { 200 } speed = { mockSpeed } >
139
+ < Rect />
140
+ </ ContentLoader >
141
+ )
142
+
143
+ jest . runTimersToTime ( mockSpeed )
144
+ unmount ( )
145
+ jest . runTimersToTime ( mockSpeed )
146
+
147
+ expect ( animationSpy ) . toHaveBeenCalledTimes ( 1 )
148
+ } )
149
+ } )
150
+ } )
124
151
} )
You can’t perform that action at this time.
0 commit comments