首页只调用必须的接口
This commit is contained in:
@@ -3,11 +3,9 @@ import ListCard from "@/components/ListCard";
|
||||
import ListLoadError from "@/components/ListLoadError";
|
||||
import ListCardSkeleton from "@/components/ListCardSkeleton";
|
||||
import { useReachBottom } from "@tarojs/taro";
|
||||
import { useUserInfo, useUserActions } from "@/store/userStore";
|
||||
import { setStorage, getStorage } from "@/store/storage";
|
||||
import { useUserInfo, useUserActions, useLastTestResult } from "@/store/userStore";
|
||||
import { NTRPTestEntryCard } from "@/components";
|
||||
import { EvaluateScene } from "@/store/evaluateStore";
|
||||
import evaluateService from "@/services/evaluateService";
|
||||
import { waitForAuthInit } from "@/utils/authInit";
|
||||
import "./index.scss";
|
||||
import { useRef, useEffect, useState, useMemo } from "react";
|
||||
@@ -40,10 +38,11 @@ const ListContainer = (props) => {
|
||||
|
||||
const [showNumber, setShowNumber] = useState(0);
|
||||
const [showSkeleton, setShowSkeleton] = useState(false);
|
||||
const [hasTestInLastMonth, setHasTestInLastMonth] = useState(false);
|
||||
|
||||
const userInfo = useUserInfo();
|
||||
const { fetchUserInfo } = useUserActions();
|
||||
const { fetchUserInfo, fetchLastTestResult } = useUserActions();
|
||||
// 使用全局状态中的测试结果,避免重复调用接口
|
||||
const lastTestResult = useLastTestResult();
|
||||
|
||||
useReachBottom(() => {
|
||||
// 加载更多方法
|
||||
@@ -100,17 +99,21 @@ const ListContainer = (props) => {
|
||||
// 先等待静默登录完成
|
||||
await waitForAuthInit();
|
||||
// 然后再获取用户信息
|
||||
if (!userInfo.id) {
|
||||
const userInfoId = userInfo && 'id' in userInfo ? userInfo.id : null;
|
||||
if (!userInfoId) {
|
||||
await fetchUserInfo();
|
||||
return; // 等待下一次 useEffect 触发(此时 userInfo.id 已有值)
|
||||
}
|
||||
// 获取测试结果
|
||||
const res = await evaluateService.getLastResult();
|
||||
if (res.code === 0) {
|
||||
setHasTestInLastMonth(res.data.has_test_in_last_month);
|
||||
// 如果全局状态中没有测试结果,则调用接口(使用请求锁,多个组件同时调用时只会请求一次)
|
||||
if (!lastTestResult) {
|
||||
await fetchLastTestResult();
|
||||
}
|
||||
};
|
||||
init();
|
||||
}, [evaluateFlag, userInfo.id]);
|
||||
}, [evaluateFlag, userInfo, lastTestResult, fetchLastTestResult]);
|
||||
|
||||
// 从全局状态中获取测试状态
|
||||
const hasTestInLastMonth = lastTestResult?.has_test_in_last_month || false;
|
||||
|
||||
if (error) {
|
||||
return <ListLoadError reload={reload} />;
|
||||
|
||||
Reference in New Issue
Block a user