如何将 SWR 与通用 T 一起使用?
How to use SWR with generic T?
我已将 SWR 包装到自定义挂钩中:
import useSWR from 'swr';
export enum MethodTypes {
POST = 'POST',
PUT = 'PUT',
GET = 'GET',
DELETE = 'DELETE',
PATCH = 'PATCH'
}
type QueryBody = {
method: MethodTypes;
body: Object;
};
const useFetch = <T>(url: string, dataObj: QueryBody) => {
const fetcher = async () => {
return await fetch(url, {
method: dataObj.method,
body: JSON.stringify(dataObj.body)
}).then((res) => {
return res.json();
});
};
const { data, error } = useSWR<T>(fetcher);
return {
data,
error
};
};
export default useFetch;
我称之为:
const { data } = useFetch<Cart>('myUrl', {
method: MethodTypes.POST,
body: {
myBodyObj
}
});
购物车类型:
export type Cart = {
cartId: string;
items: Array<CartItem>;
};
我可以看到我收到了 200 响应,所以调用成功了,但我的数据始终未定义。
我在这里错过了什么?
useSWR
的第一个参数应该是关键。
我已将 SWR 包装到自定义挂钩中:
import useSWR from 'swr';
export enum MethodTypes {
POST = 'POST',
PUT = 'PUT',
GET = 'GET',
DELETE = 'DELETE',
PATCH = 'PATCH'
}
type QueryBody = {
method: MethodTypes;
body: Object;
};
const useFetch = <T>(url: string, dataObj: QueryBody) => {
const fetcher = async () => {
return await fetch(url, {
method: dataObj.method,
body: JSON.stringify(dataObj.body)
}).then((res) => {
return res.json();
});
};
const { data, error } = useSWR<T>(fetcher);
return {
data,
error
};
};
export default useFetch;
我称之为:
const { data } = useFetch<Cart>('myUrl', {
method: MethodTypes.POST,
body: {
myBodyObj
}
});
购物车类型:
export type Cart = {
cartId: string;
items: Array<CartItem>;
};
我可以看到我收到了 200 响应,所以调用成功了,但我的数据始终未定义。 我在这里错过了什么?
useSWR
的第一个参数应该是关键。