Your Name 2 gadus atpakaļ
vecāks
revīzija
4ebf4caeb9

+ 1
- 7
src/components/PowerList/index.jsx Parādīt failu

@@ -11,7 +11,6 @@ export default React.forwardRef((props, ref) => {
11 11
 
12 12
   const pageSize = 5;
13 13
   const pageShowRef = React.useRef(false);
14
-  const inited = React.useRef(false);
15 14
   const [loading, setLoading] = React.useState(false);
16 15
   const [list, setList] = React.useState([]);
17 16
   const [finished, setFinished] = React.useState(true);
@@ -100,17 +99,12 @@ export default React.forwardRef((props, ref) => {
100 99
 
101 100
   useHide(() => {
102 101
     pageShowRef.current = false;
102
+    Taro.removeStorageSync(`list-${sid}`);
103 103
   });
104 104
   
105 105
   // 页面隐藏之后, 还会执行一次 useEffect
106 106
   // 不知道是否是 Taro 的 bug
107 107
   React.useEffect(() => {
108
-    if (!inited.current) {
109
-      // 首次进入, 清理缓存
110
-      Taro.removeStorageSync(`list-${sid}`);
111
-      inited.current = true;
112
-    }
113
-
114 108
     if (pageShowRef.current) {
115 109
       refresh(params);
116 110
     }

+ 11
- 20
src/layouts/hooks/useHide.js Parādīt failu

@@ -1,34 +1,25 @@
1 1
 import React from "react";
2
-import evtBus from '@/utils/event_bus';
2
+import Taro from '@tarojs/taro';
3 3
 
4 4
 /**
5 5
  * 页面显示, 隐藏 hook, 可以在 component 中使用
6 6
  */
7
-export default (fn, deps) => {
7
+export default (fn) => {
8 8
   const fnRef = React.useRef();
9 9
   fnRef.current = fn;
10 10
 
11
-  const [evt, func] = React.useMemo(() => {
12
-    const evt1 = evtBus.current();
13
-    const func1 = () => fnRef.current();
11
+  const evt = React.useMemo(() => {
12
+    const _evt = Taro.getCurrentInstance().router.onHide;
13
+    Taro.eventCenter.on(_evt, fnRef.current);
14 14
 
15
-    evt1.addEventListener('hide', func1);
16
-    evt1.addEventListener('unload', func1);
17
-
18
-    return [
19
-      evt1,
20
-      func1,
21
-    ];
15
+    return _evt;
22 16
   }, []);
23 17
 
24 18
   React.useEffect(() => {
25
-    evt.addEventListener('hide', func);
26
-    evt.addEventListener('unload', func);
27
-
28 19
     return () => {
29
-      evt.removeEventListener('hide', func);
30
-      evt.removeEventListener('unload', func);
31
-    };
32
-    // eslint-disable-next-line react-hooks/exhaustive-deps
33
-  }, deps);
20
+      fnRef.current(); // 卸载的时候也执行一次
21
+      Taro.eventCenter.off(evt, fnRef.current);
22
+    }
23
+  }, []);
34 24
 }
25
+

+ 9
- 17
src/layouts/hooks/useShow.js Parādīt failu

@@ -1,31 +1,23 @@
1 1
 import React from "react";
2
-import evtBus from '@/utils/event_bus';
2
+import Taro from '@tarojs/taro';
3 3
 
4 4
 /**
5 5
  * 页面显示, 隐藏 hook, 可以在 component 中使用
6 6
  */
7
-export default (fn, deps) => {
7
+export default (fn) => {
8 8
   const fnRef = React.useRef();
9 9
   fnRef.current = fn;
10 10
 
11
-  const [evt, func] = React.useMemo(() => {
12
-    const evt1 = evtBus.current();
13
-    const func1 = () => console.log('--show-->') || fnRef.current();
11
+  const evt = React.useMemo(() => {
12
+    const _evt = Taro.getCurrentInstance().router.onShow;
13
+    Taro.eventCenter.on(_evt, fnRef.current);
14 14
 
15
-    evt1.addEventListener('show', func1);
16
-
17
-    return [
18
-      evt1,
19
-      func1,
20
-    ];
15
+    return _evt;
21 16
   }, []);
22 17
 
23 18
   React.useEffect(() => {
24
-    evt.addEventListener('show', func);
25
-
26 19
     return () => {
27
-      evt.removeEventListener('show', func);
28
-    };
29
-    // eslint-disable-next-line react-hooks/exhaustive-deps
30
-  }, deps);
20
+      Taro.eventCenter.off(evt, fnRef.current);
21
+    }
22
+  }, []);
31 23
 }

+ 0
- 25
src/layouts/index.jsx Parādīt failu

@@ -5,7 +5,6 @@ import { useModel } from '@/store';
5 5
 import { Loading, Notify, Dialog } from '@antmjs/vantui';
6 6
 import NavLoading from '@/components/NavLoading';
7 7
 import Auth from '@/components/Auth';
8
-import evtBus from '@/utils/event_bus';
9 8
 import TabBar from './TabBar';
10 9
 import laySty from './layout.module.less';
11 10
 
@@ -15,10 +14,6 @@ export default (props) => {
15 14
   const { person, user, duty } = useModel('user');
16 15
   const containerClass = `${laySty['page-conatiner']} ${tabBar ? laySty['with-tabbar'] : ''} ${className}`;
17 16
 
18
-  const evt = React.useMemo(() => {
19
-    return evtBus.current();
20
-  }, []);
21
-
22 17
   React.useEffect(() => {
23 18
     if (person && !user) {
24 19
       const currentPage = Taro.getCurrentPages().slice().pop();
@@ -36,26 +31,6 @@ export default (props) => {
36 31
     };
37 32
   });
38 33
 
39
-  Taro.useDidShow(() => {
40
-    // useDidShow 比 React Hook 要早
41
-    // 所以使用 nextTick
42
-    Taro.nextTick(() => {
43
-      evt.dispatchEvent('show');
44
-    });
45
-  });
46
-
47
-  Taro.useDidHide(() => {
48
-    Taro.nextTick(() => {
49
-      evt.dispatchEvent('hide');
50
-    });
51
-  })
52
-
53
-  Taro.useUnload(() => {
54
-    Taro.nextTick(() => {
55
-      evt.dispatchEvent('unload');
56
-    });
57
-  })
58
-
59 34
   return (
60 35
       <View className={laySty['page-wrapper']}>
61 36
         <Notify id="vanNotify" />

+ 5
- 3
src/pages/home/components/StatCard.jsx Parādīt failu

@@ -9,6 +9,8 @@ export default React.forwardRef((props, ref) => {
9 9
   const { duty } = props;
10 10
 
11 11
   const [list, setList] = React.useState([]);
12
+  const dutyRef = React.useRef();
13
+  dutyRef.current = duty;
12 14
 
13 15
   const classNames = React.useMemo(() => {
14 16
     return [
@@ -32,10 +34,10 @@ export default React.forwardRef((props, ref) => {
32 34
   }), [duty]);
33 35
 
34 36
   useShow(() => {
35
-    if (duty) {
36
-      getIndexData(duty).then(setList);
37
+    if (dutyRef.current) {
38
+      getIndexData(dutyRef.current).then(setList);
37 39
     }
38
-  }, [duty]);
40
+  });
39 41
 
40 42
   return (
41 43
     <View className={classNames}>

+ 2
- 1
src/utils/tools.js Parādīt failu

@@ -2,9 +2,10 @@
2 2
 // @fn 是对应请求数据
3 3
 // @ms 是用户多次触发事件的时间间隔 是一个毫秒数
4 4
 export function throttle(fn, ms = 800){
5
-  let flag = true
5
+  let flag = true;
6 6
 
7 7
   return (...args) => {
8
+    console.log('-----flag----', flag);
8 9
     if(!flag) return;
9 10
 
10 11
     flag = false;