1
This commit is contained in:
@@ -79,7 +79,8 @@ function Index() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// 位置更新后,重新获取详情页数据(因为距离等信息可能发生变化)
|
// 位置更新后,重新获取详情页数据(因为距离等信息可能发生变化)
|
||||||
await fetchDetail();
|
// 注意:这里不调用 fetchDetail,避免与 useDidShow 中的调用重复
|
||||||
|
// 如果需要更新距离信息,可以在 fetchDetail 成功后根据当前位置重新计算
|
||||||
if (from === "publish") {
|
if (from === "publish") {
|
||||||
handleShare(true);
|
handleShare(true);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ export interface UserState {
|
|||||||
fetchUserInfo: () => Promise<UserInfoType | undefined>;
|
fetchUserInfo: () => Promise<UserInfoType | undefined>;
|
||||||
updateUserInfo: (userInfo: Partial<UserInfoType>) => void;
|
updateUserInfo: (userInfo: Partial<UserInfoType>) => void;
|
||||||
nicknameChangeStatus: Partial<NicknameChangeStatus>;
|
nicknameChangeStatus: Partial<NicknameChangeStatus>;
|
||||||
checkNicknameChangeStatus: () => void;
|
checkNicknameChangeStatus: (force?: boolean) => void;
|
||||||
updateNickname: (nickname: string) => void;
|
updateNickname: (nickname: string) => void;
|
||||||
// NTRP 测试结果缓存
|
// NTRP 测试结果缓存
|
||||||
lastTestResult: LastTimeTestResult | null;
|
lastTestResult: LastTimeTestResult | null;
|
||||||
@@ -32,6 +32,10 @@ const getTimeNextDate = (time: string) => {
|
|||||||
return `${year}-${month}-${day}`;
|
return `${year}-${month}-${day}`;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 请求锁,避免重复调用
|
||||||
|
let isFetchingLastTestResult = false;
|
||||||
|
let isCheckingNicknameStatus = false;
|
||||||
|
|
||||||
export const useUser = create<UserState>()((set) => ({
|
export const useUser = create<UserState>()((set) => ({
|
||||||
user: {},
|
user: {},
|
||||||
fetchUserInfo: async () => {
|
fetchUserInfo: async () => {
|
||||||
@@ -87,8 +91,20 @@ export const useUser = create<UserState>()((set) => ({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
nicknameChangeStatus: {},
|
nicknameChangeStatus: {},
|
||||||
checkNicknameChangeStatus: async () => {
|
checkNicknameChangeStatus: async (force = false) => {
|
||||||
|
// 如果正在请求中,直接返回,避免重复调用
|
||||||
|
if (isCheckingNicknameStatus) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// 如果已经有状态数据且不是强制更新,跳过,避免重复调用
|
||||||
|
if (!force) {
|
||||||
|
const currentState = useUser.getState();
|
||||||
|
if (currentState.nicknameChangeStatus && Object.keys(currentState.nicknameChangeStatus).length > 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
|
isCheckingNicknameStatus = true;
|
||||||
const res = await checkNicknameChangeStatusApi();
|
const res = await checkNicknameChangeStatusApi();
|
||||||
const { next_period_start_time } = res.data;
|
const { next_period_start_time } = res.data;
|
||||||
set({
|
set({
|
||||||
@@ -99,12 +115,15 @@ export const useUser = create<UserState>()((set) => ({
|
|||||||
});
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("检查昵称变更状态失败:", error);
|
console.error("检查昵称变更状态失败:", error);
|
||||||
|
} finally {
|
||||||
|
isCheckingNicknameStatus = false;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
updateNickname: async (nickname) => {
|
updateNickname: async (nickname) => {
|
||||||
try {
|
try {
|
||||||
await updateNicknameApi(nickname);
|
await updateNicknameApi(nickname);
|
||||||
await useUser.getState().checkNicknameChangeStatus();
|
// 更新昵称后强制更新状态
|
||||||
|
await useUser.getState().checkNicknameChangeStatus(true);
|
||||||
set((state) => ({
|
set((state) => ({
|
||||||
user: { ...state.user, nickname },
|
user: { ...state.user, nickname },
|
||||||
}));
|
}));
|
||||||
@@ -115,7 +134,27 @@ export const useUser = create<UserState>()((set) => ({
|
|||||||
// NTRP 测试结果缓存
|
// NTRP 测试结果缓存
|
||||||
lastTestResult: null,
|
lastTestResult: null,
|
||||||
fetchLastTestResult: async () => {
|
fetchLastTestResult: async () => {
|
||||||
|
// 如果已经有缓存数据,直接返回,避免重复调用
|
||||||
|
const currentState = useUser.getState();
|
||||||
|
if (currentState.lastTestResult) {
|
||||||
|
return currentState.lastTestResult;
|
||||||
|
}
|
||||||
|
// 如果正在请求中,等待请求完成,避免重复调用
|
||||||
|
if (isFetchingLastTestResult) {
|
||||||
|
// 等待请求完成,最多等待 3 秒
|
||||||
|
let waitCount = 0;
|
||||||
|
while (isFetchingLastTestResult && waitCount < 30) {
|
||||||
|
await new Promise((resolve) => setTimeout(resolve, 100));
|
||||||
|
waitCount++;
|
||||||
|
const state = useUser.getState();
|
||||||
|
if (state.lastTestResult) {
|
||||||
|
return state.lastTestResult;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
|
isFetchingLastTestResult = true;
|
||||||
const res = await evaluateService.getLastResult();
|
const res = await evaluateService.getLastResult();
|
||||||
if (res.code === 0) {
|
if (res.code === 0) {
|
||||||
set({ lastTestResult: res.data });
|
set({ lastTestResult: res.data });
|
||||||
@@ -125,6 +164,8 @@ export const useUser = create<UserState>()((set) => ({
|
|||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("获取NTRP测试结果失败:", error);
|
console.error("获取NTRP测试结果失败:", error);
|
||||||
return null;
|
return null;
|
||||||
|
} finally {
|
||||||
|
isFetchingLastTestResult = false;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
}));
|
}));
|
||||||
|
|||||||
Reference in New Issue
Block a user