如何使用 useLazyQuery() 在每次点击时执行查询
How to execute query on every click using useLazyQuery()
使用 @apollo/react-hooks
中的 useLazyQuery()
钩子,我能够通过单击按钮执行查询。但是我不能使用它在连续点击时执行相同的查询。
export default ({ queryVariables }) => {
const [sendQuery, { data, loading }] = useLazyQuery(GET_DIRECTION, {
variables: queryVariables
});
return <div onClick={sendQuery}>Click here</div>;
}
上面的sendQuery
只执行一次。
useLazyQuery 使用缓存优先的默认网络策略所以我假设你的 onClick 函数实际执行但是因为返回值是缓存中的值,React 注意到数据没有变化,因此状态没有更新因为返回的数据是它已经拥有的数据,没有重新渲染,事情似乎没有改变。我建议你应该传递一个不同的网络策略,比如
const [sendQuery, { data, loading }] = useLazyQuery(GET_DIRECTION, {
variables: queryVariables,
fetchPolicy: "network-only"
});
这意味着您需要 api 中的最新信息,因此基本上没有缓存。
您可能还想尝试其他选项,看看哪个最适合您
喜欢 cache-and-network:
你可以在这里找到更多 understanding-apollo-fetch-policies
根据 docs,useLazyQuery
接受参数 fetchPolicy
。
const [lazyQuery, { data, loading }] = useLazyQuery(QUERY, {
fetchPolicy: 'no-cache'
});
将 fetchPolicy
设置为 no-cache
,查询结果不会存储在缓存中。
使用 @apollo/react-hooks
中的 useLazyQuery()
钩子,我能够通过单击按钮执行查询。但是我不能使用它在连续点击时执行相同的查询。
export default ({ queryVariables }) => {
const [sendQuery, { data, loading }] = useLazyQuery(GET_DIRECTION, {
variables: queryVariables
});
return <div onClick={sendQuery}>Click here</div>;
}
上面的sendQuery
只执行一次。
useLazyQuery 使用缓存优先的默认网络策略所以我假设你的 onClick 函数实际执行但是因为返回值是缓存中的值,React 注意到数据没有变化,因此状态没有更新因为返回的数据是它已经拥有的数据,没有重新渲染,事情似乎没有改变。我建议你应该传递一个不同的网络策略,比如
const [sendQuery, { data, loading }] = useLazyQuery(GET_DIRECTION, {
variables: queryVariables,
fetchPolicy: "network-only"
});
这意味着您需要 api 中的最新信息,因此基本上没有缓存。
您可能还想尝试其他选项,看看哪个最适合您
喜欢 cache-and-network:
你可以在这里找到更多 understanding-apollo-fetch-policies
根据 docs,useLazyQuery
接受参数 fetchPolicy
。
const [lazyQuery, { data, loading }] = useLazyQuery(QUERY, {
fetchPolicy: 'no-cache'
});
将 fetchPolicy
设置为 no-cache
,查询结果不会存储在缓存中。