如何在 react-query 中进行依赖查询?
How do I make dependent queries in react-query?
我有一个名为 Sidebar.tsx
的组件,它正在此处获取一些数据,但我只想在 studentId
可用时才获取级别。我查看了 react-query
documentation 上的相关查询。我在我的代码中应用了它,但它看起来不起作用。这是我所做的。
首先,我也从 API 中获取了 studentId
,这是它的样子:
const studentId = intakeProgramStore.getStudentShipByUserId(authUser?.id)
.data?.data.data[0];
新增获取节目的功能
class IntakeProgramStore{
getIntakeProgramsByStudent(studentId: string) {
return useQuery(
['intakeProgram/studentId', studentId],
() => intakeProgramService.getIntakeProgramsByStudent(studentId),
{ enabled: !!studentId },
);
}
}
export const intakeStore = new IntakeProgramStore();
这个函数位于 stores/intake.store.ts
中,它的作用是当它被调用时调用一个名为 intakeProgramService.getIntakeProgramsByStudent
的服务方法,该方法也在顶部导入并且按预期工作正常。我在这里遇到的问题是,它正在调用该服务,即使 studentId
未定义,而它应该在它有值时调用它。
这是我在 Sidebar.tsx
中调用它的方式,这是我的 UI 组件
const programs = intakeProgramStore.getIntakeProgramsByStudent(student.id)
.data?.data.data[0];
我将 stores/intake.store.ts
文件中的代码移到了 Sidebar.tsx
中,现在它工作正常,但我不知道为什么。这是它的样子
const programs = useQuery(
['intakeProgram/studentId', student?.id],
() => intakeProgramService.getIntakeProgramsByStudent(student?.id),
{ enabled: !!student
我不确定为什么当我在商店内取货时它不起作用,但当我在 UI 组件中取货时它可以工作。
一般来说,您的代码看起来是正确的。我 可以 看到的唯一一件事是,在第一个示例中,您在名为 getIntakeProgramsByStudent
的函数中调用 useQuery
,这是一个无效的挂钩调用。钩子只能调用:
- 按功能反应组件
- inside custom hooks,它们是以
use...
. 开头的函数
另请参阅 rules of hooks React 文档。
您的 useQuery 调用的自定义挂钩是:
export const useIntakeProgramsByStudent(studentId: string) {
return useQuery(
['intakeProgram/studentId', studentId],
() => intakeProgramService.getIntakeProgramsByStudent(studentId),
{ enabled: !!studentId },
);
}
我有一个名为 Sidebar.tsx
的组件,它正在此处获取一些数据,但我只想在 studentId
可用时才获取级别。我查看了 react-query
documentation 上的相关查询。我在我的代码中应用了它,但它看起来不起作用。这是我所做的。
首先,我也从 API 中获取了 studentId
,这是它的样子:
const studentId = intakeProgramStore.getStudentShipByUserId(authUser?.id)
.data?.data.data[0];
新增获取节目的功能
class IntakeProgramStore{
getIntakeProgramsByStudent(studentId: string) {
return useQuery(
['intakeProgram/studentId', studentId],
() => intakeProgramService.getIntakeProgramsByStudent(studentId),
{ enabled: !!studentId },
);
}
}
export const intakeStore = new IntakeProgramStore();
这个函数位于 stores/intake.store.ts
中,它的作用是当它被调用时调用一个名为 intakeProgramService.getIntakeProgramsByStudent
的服务方法,该方法也在顶部导入并且按预期工作正常。我在这里遇到的问题是,它正在调用该服务,即使 studentId
未定义,而它应该在它有值时调用它。
这是我在 Sidebar.tsx
中调用它的方式,这是我的 UI 组件
const programs = intakeProgramStore.getIntakeProgramsByStudent(student.id)
.data?.data.data[0];
我将 stores/intake.store.ts
文件中的代码移到了 Sidebar.tsx
中,现在它工作正常,但我不知道为什么。这是它的样子
const programs = useQuery(
['intakeProgram/studentId', student?.id],
() => intakeProgramService.getIntakeProgramsByStudent(student?.id),
{ enabled: !!student
我不确定为什么当我在商店内取货时它不起作用,但当我在 UI 组件中取货时它可以工作。
一般来说,您的代码看起来是正确的。我 可以 看到的唯一一件事是,在第一个示例中,您在名为 getIntakeProgramsByStudent
的函数中调用 useQuery
,这是一个无效的挂钩调用。钩子只能调用:
- 按功能反应组件
- inside custom hooks,它们是以
use...
. 开头的函数
另请参阅 rules of hooks React 文档。
您的 useQuery 调用的自定义挂钩是:
export const useIntakeProgramsByStudent(studentId: string) {
return useQuery(
['intakeProgram/studentId', studentId],
() => intakeProgramService.getIntakeProgramsByStudent(studentId),
{ enabled: !!studentId },
);
}