我有一个异步函数,希望使用它来查询和返回一个值,如下所示:
async function checkProfileFeature(values: any) {
const data = await client.query<any>({
query: PROFILE_QUERY,
variables: { userId: 1, profileId: values.id },
});
if(something) {
return true
}
} 基于此返回值,我希望显示或不显示一个字段:
{checkProfileFeatures(profile) === true && (
<Input .... />
)}不幸的是,我无法让它同时返回值并在其结果上显示字段。有推荐的方法吗?
发布于 2022-02-13 15:14:02
checkProfileFeature有一个async关键字,这基本上意味着它将返回一个承诺,在您的例子中是Promise<boolean | undefined> (因为您只在满足某个条件时才返回true )。checkProfileFeatures(profile) === true永远不会是真的,因为正如我已经提到的,您的函数返回一个承诺。您想要做的是将您的checkProfileFeatures放在useEffect中,然后将查询的结果存储在某种类型的存储或useState中。
// Run on first render
useEffect(() => {
const fetchQuery = async () => {
await checkProfileFeature({});
}
fetchQuery();
}, [])然后,在checkProfileFeature内部保存结果
async function checkProfileFeature(values: any) {
const data = await client.query<any>({
query: PROFILE_QUERY,
variables: { userId: 1, profileId: values.id },
});
if(something) {
setSomethingHappened(true);
}
} 作为回报,您可以使用这个获取的值
{somethingHappened === true && (
<Input .... />
)}当然,您仍然需要弄清楚如何处理加载状态,您可能需要创建一个额外的状态来判断请求是否仍在运行。
https://stackoverflow.com/questions/71101707
复制相似问题