1
- import React , { useEffect , useReducer , useState } from "react" ;
1
+ import React , { useEffect , useLayoutEffect , useReducer , useState } from "react" ;
2
2
import { useInterval } from "usehooks-ts" ;
3
3
import Block from "./components/Block" ;
4
4
import {
@@ -27,14 +27,22 @@ function App() {
27
27
const [ bgBlock , bgBlockDispatch ] = useReducer ( bgBlockReducer , [
28
28
...EMPTY_BLOCK ,
29
29
] ) ;
30
- useEffect ( ( ) => {
31
- initGame ( ) ;
32
- } , [ ] ) ;
33
30
const initGame = ( ) => {
34
31
bgBlockDispatch ( { type : INITIAL_SCREEN } ) ;
35
32
moveBlockDispatch ( { type : INITIAL_SCREEN } ) ;
36
33
moveBlockDispatch ( { type : ADD_BLOCK , bgBlock } ) ;
37
34
} ;
35
+ useEffect ( ( ) => {
36
+ initGame ( ) ;
37
+ } , [ ] ) ;
38
+ useLayoutEffect ( ( ) => {
39
+ if ( hasRepeatBlock ( moveBlock , bgBlock ) ) {
40
+ setTimeout ( ( ) => {
41
+ alert ( "游戏结束, 是否重新开始?" ) ;
42
+ initGame ( ) ;
43
+ } , 0 ) ;
44
+ }
45
+ } , [ bgBlock ] ) ;
38
46
const combineDown = ( _moveBlock = moveBlock ) => {
39
47
// 1. 判断是否有方块
40
48
if ( hasBlock ( _moveBlock ) ) {
@@ -45,11 +53,7 @@ function App() {
45
53
} else {
46
54
// 4. 不能移动,合并方块, 重新生成方块
47
55
bgBlockDispatch ( { type : MERGE_BLOCK , moveBlock : _moveBlock } ) ;
48
- moveBlockDispatch ( { type : ADD_BLOCK } ) ;
49
- if ( hasRepeatBlock ( _moveBlock , bgBlock ) ) {
50
- alert ( "游戏结束" ) ;
51
- initGame ( ) ;
52
- }
56
+ moveBlockDispatch ( { type : ADD_BLOCK , bgBlock } ) ;
53
57
}
54
58
}
55
59
} ;
0 commit comments