|
1 | 1 | import * as React from 'react'; |
2 | 2 | import { useRef, useEffect } from 'react'; |
| 3 | +import useState from 'rc-util/lib/hooks/useState'; |
3 | 4 | import { |
4 | 5 | STATUS_APPEAR, |
5 | 6 | STATUS_NONE, |
6 | | - MotionStatus, |
7 | 7 | STATUS_LEAVE, |
8 | 8 | STATUS_ENTER, |
9 | | - MotionEventHandler, |
10 | 9 | STEP_PREPARE, |
11 | 10 | STEP_START, |
12 | 11 | STEP_ACTIVE, |
| 12 | +} from '../interface'; |
| 13 | +import type { |
| 14 | + MotionStatus, |
| 15 | + MotionEventHandler, |
13 | 16 | MotionEvent, |
14 | 17 | MotionPrepareEventHandler, |
15 | 18 | StepStatus, |
16 | 19 | } from '../interface'; |
17 | | -import useState from './useState'; |
18 | | -import { CSSMotionProps } from '../CSSMotion'; |
| 20 | +import type { CSSMotionProps } from '../CSSMotion'; |
19 | 21 | import useIsomorphicLayoutEffect from './useIsomorphicLayoutEffect'; |
20 | 22 | import useStepQueue, { DoStep, SkipStep, isActive } from './useStepQueue'; |
21 | 23 | import useDomMotionEvents from './useDomMotionEvents'; |
@@ -52,7 +54,6 @@ export default function useStatus( |
52 | 54 |
|
53 | 55 | const mountedRef = useRef(false); |
54 | 56 | const deadlineRef = useRef(null); |
55 | | - const destroyedRef = useRef(false); |
56 | 57 |
|
57 | 58 | // =========================== Dom Node =========================== |
58 | 59 | const cacheElementRef = useRef<HTMLElement>(null); |
@@ -85,9 +86,9 @@ export default function useStatus( |
85 | 86 | } |
86 | 87 |
|
87 | 88 | // Only update status when `canEnd` and not destroyed |
88 | | - if (canEnd !== false && !destroyedRef.current) { |
89 | | - setStatus(STATUS_NONE); |
90 | | - setStyle(null); |
| 89 | + if (canEnd !== false) { |
| 90 | + setStatus(STATUS_NONE, true); |
| 91 | + setStyle(null, true); |
91 | 92 | } |
92 | 93 | } |
93 | 94 |
|
@@ -126,7 +127,7 @@ export default function useStatus( |
126 | 127 | } |
127 | 128 | }, [status]); |
128 | 129 |
|
129 | | - const [startStep, step] = useStepQueue(status, (newStep) => { |
| 130 | + const [startStep, step] = useStepQueue(status, newStep => { |
130 | 131 | // Only prepare step can be skip |
131 | 132 | if (newStep === STEP_PREPARE) { |
132 | 133 | const onPrepare = eventHandlers[STEP_PREPARE]; |
@@ -219,7 +220,6 @@ export default function useStatus( |
219 | 220 | useEffect( |
220 | 221 | () => () => { |
221 | 222 | clearTimeout(deadlineRef.current); |
222 | | - destroyedRef.current = true; |
223 | 223 | }, |
224 | 224 | [], |
225 | 225 | ); |
|
0 commit comments