Tìm kiếm trang web

reactjs - RTK Query UseLazyQuery trigger: làm thế nào để lấy kiểu đúng?


Tôi cần nhận được kiểu đúng cho trigger, mà tôi đang truyền cho component con, không thể tìm cách để định kiểu nó.

...      
const [trigger] = useLazyGetQuery();
...
<ChildComponent trigger={trigger} />
...

Thành phần con nơi tôi cần gõ loại nào đó kích hoạt truy vấn RTK ngoại trừ bất kỳ:

export const ChildComponent = ({ trigger }: { trigger: any }) => {...}

Câu trả lời #1

Tôi đã tìm thấy loại đúng:

import { LazyQueryTrigger } from "@reduxjs/toolkit/dist/query/react/buildHooks";
import {
  BaseQueryFn,
  FetchArgs,
  FetchBaseQueryError,
  FetchBaseQueryMeta,
  QueryDefinition,
} from "@reduxjs/toolkit/query";
import { IDemoRequest } from "../../../../../../../modules/Demo/apis/interfaces/IDemoRequest";

export type LazyGetTriggerType = LazyQueryTrigger<
  QueryDefinition<
    IDemoRequest,            // Request parameters type
    BaseQueryFn<string | FetchArgs, unknown, FetchBaseQueryError, object, FetchBaseQueryMeta>,
    never,
    number[],                // Response type
    "api"                    // Your reducerPath
  >
>;

Đổi bất kỳ thành LazyGetTriggerType

export const ChildComponent = ({ trigger }: { trigger: LazyGetTriggerType }) => {...}

Câu trả lời #2

Chỉ mở rộng từ câu trả lời của OP, để sử dụng điều này một cách tổng quát, bạn có thể định nghĩa kiểu tham số request và kiểu response như các kiểu tổng quát <T, U>, để nó có thể được chia sẻ trong dự án của bạn:

export type LazyGetTriggerType<T, U> = LazyQueryTrigger<
  QueryDefinition<
    T,                // Request parameters type
    BaseQueryFn<string | FetchArgs, unknown, FetchBaseQueryError, object, FetchBaseQueryMeta>,
    never,
    U,                // Response type
    "api"             // Your reducerPath
  >
>;

Bài viết liên quan