我正在使用 React-query 进行 API 调用。我想知道是否有一种方法可以以惰性方式调用查询。
意味着仅当查询参数更改时才调用查询。
这就是我目前所拥有的;我正在使用一个 hack,其中useEffectifrecipeName更改,然后运行该refetch函数。
export const searchRecipeByName = async (recipeName: string) => {
return await api.get(
`/recipes/complexSearch?apiKey=${process.env.NEXT_PUBLIC_SPOONACULAR_API_KEY}&query=${recipeName}&addRecipeInformation=true&fillIngredients=true`
);
};
Run Code Online (Sandbox Code Playgroud)
const [recipeName, setRecipeName] = useState("");
const { data, refetch } = useQuery(
"homePageSearchQuery",
() => searchRecipeByName(recipeName),
{ enabled: false }
);
// HACK
useEffect(() => {
if (!!recipeName) {
refetch();
}
}, [recipeName]);
const handleOnSearchSubmit = async (recipeSearch: RecipeSearch) => {
setRecipeName(recipeSearch.search);
};
Run Code Online (Sandbox Code Playgroud)
最好,我想在函数中调用查询handleOnSearchSubmit。
我可以创建一个自定义useLazyQuery钩子来处理这个问题,但我想知道 React-query 是否有本地方法来处理这个问题。
在故事书中,我收到以下错误:No QueryClient set, use QueryClientProvider to set one
在我的 _app.tsx 中:
const queryClient = new QueryClient();
const MyApp = ({ Component, pageProps }: AppProps) => {
return (
<QueryClientProvider client={queryClient}>
<Component {...pageProps} />
</QueryClientProvider>
);
};
Run Code Online (Sandbox Code Playgroud)
我尝试将故事包装在 QueryClientProvider 中:
// method 1
export default {
...
decorators: [
(Story) => {
const queryClient = new QueryClient();
return (
<QueryClientProvider client={queryClient}>
<Story />
</QueryClientProvider>
);
},
],
} as Meta;
// method 2
export const Complete = () => { …Run Code Online (Sandbox Code Playgroud) 我试图用打字稿设置 ContextApi 和 useReducer。在 useReducer 中的“issuesInitialState”变量上,出现错误:
没有重载匹配这个调用。Overload 1 of 5, '(reducer: ({ state, action }: IssueReducer) => {}, initializerArg: never, initializer?: undefined): [never, DispatchWithoutAction]',给出了以下错误。“IssuesInitialState”类型的参数不可分配给“never”类型的参数。Overload 2 of 5, '(reducer: ({ state, action }: IssueReducer) => {}, initialState: never, initializer?: undefined): [never, Dispatch]',给出了以下错误。“IssuesInitialState”类型的参数不可分配给“never”类型的参数。ts(2769)
// Store.tsx
type Issue = {
closeDate: string | null;
description: string;
issueId: number;
lastEditDate: string | null;
priorityId: string;
projectId: number;
reportDate: string;
statusId: string;
title: string;
userId: number;
};
interface IssuesInitialState {
issues: Issue[];
issue: Issue;
issuesByProject: …Run Code Online (Sandbox Code Playgroud) 我想验证发布请求正文中的日期数组:
{
"meals": [...],
"dates": [
"2022-03-06T11:00:00.000Z",
"2022-03-07T11:00:00.000Z"
]
}
Run Code Online (Sandbox Code Playgroud)
这是我的 dto 课程:
export class CopyMealsPlanDto {
...// Another array
@IsArray()
@ValidateNested({ each: true })
@IsDate()
@Type(() => Date)
dates: Date[];
}
Run Code Online (Sandbox Code Playgroud)
但我收到这个错误:
{
"statusCode": 400,
"message": [
"dates must be a Date instance"
],
"error": "Bad Request"
}
Run Code Online (Sandbox Code Playgroud) reactjs ×3
react-query ×2
api ×1
context-api ×1
javascript ×1
nestjs ×1
next.js ×1
storybook ×1
typescript ×1