Skip to content

Commit b24bda8

Browse files
committed
fix: remount task detail on taskId change
1 parent 4c0a159 commit b24bda8

2 files changed

Lines changed: 12 additions & 3 deletions

File tree

frontend/src/App.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Route, BrowserRouter, Routes, Navigate } from "react-router-dom"
1+
import { Route, BrowserRouter, Routes, Navigate, useParams } from "react-router-dom"
22
import { ThemeProvider, ThemePathListener } from "@/components/theme-provider"
33
import LoginPage from "@/pages/login"
44
import WelcomePage from "@/pages/welcome"
@@ -28,6 +28,11 @@ import PostCreatePage from "./pages/post-create"
2828
import ProjectOverviewPage from "./pages/console/user/project/overview"
2929
import TaskDetailPage from "./pages/console/user/task/task-detail"
3030

31+
function TaskDetailRoute() {
32+
const { taskId } = useParams()
33+
return <TaskDetailPage key={taskId} />
34+
}
35+
3136
function App() {
3237
return (
3338
<ThemeProvider defaultTheme="light" storageKey="monkeycode-theme">
@@ -45,7 +50,7 @@ function App() {
4550
<Route path="/console" element={<UserConsolePage />}>
4651
<Route index element={<Navigate to="/console/tasks" replace />} />
4752
<Route path="tasks" element={<TasksPage />} />
48-
<Route path="task/:taskId" element={<TaskDetailPage />} />
53+
<Route path="task/:taskId" element={<TaskDetailRoute />} />
4954
<Route path="project/:projectId" element={<ProjectOverviewPage />} />
5055
<Route path="gitbot" element={<GitBotsPage />} />
5156
<Route path="ide" element={<IDEIDE />} />

frontend/src/pages/console/user/task/task-detail.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ export default function TaskDetailPage() {
8484
const taskManager = React.useRef<TaskWebSocketManager | null>(null)
8585
const connectedRef = React.useRef(false)
8686
const timeoutRef = React.useRef<ReturnType<typeof setTimeout> | null>(null)
87+
const cancelledRef = React.useRef(false)
8788
const planVersionRef = React.useRef<number | undefined>(undefined)
8889
const availableCommandsVersionRef = React.useRef<number | undefined>(undefined)
8990
const fileChangesVersionRef = React.useRef<number | undefined>(undefined)
@@ -124,7 +125,7 @@ export default function TaskDetailPage() {
124125
await apiRequest("v1UsersTasksDetail", {}, [taskId], (resp) => {
125126
if (resp.code === 0) {
126127
result = resp.data
127-
setTask(resp.data)
128+
if (!cancelledRef.current) setTask(resp.data)
128129
} else {
129130
toast.error(resp.message || "获取任务详情失败")
130131
}
@@ -134,6 +135,7 @@ export default function TaskDetailPage() {
134135

135136
const scheduleFetchTaskDetail = React.useCallback(async () => {
136137
const currentTask = await fetchTaskDetail()
138+
if (cancelledRef.current) return
137139
const vmStatus = currentTask?.virtualmachine?.status
138140
let delay = 1000
139141
switch (vmStatus) {
@@ -204,8 +206,10 @@ export default function TaskDetailPage() {
204206
// 定时获取任务详情
205207
React.useEffect(() => {
206208
if (!taskId) return
209+
cancelledRef.current = false
207210
scheduleFetchTaskDetail()
208211
return () => {
212+
cancelledRef.current = true
209213
if (timeoutRef.current) {
210214
clearTimeout(timeoutRef.current)
211215
timeoutRef.current = null

0 commit comments

Comments
 (0)