【发布时间】:2020-05-02 09:49:04
【问题描述】:
我有一个 React Apollo 应用程序,我想要做的是我有一个使用图表呈现一些数据的组件。对于这些数据,我有一些过滤器保存在组件的本地状态中(使用钩子)
const [filters, setFilters] = useState(defaultFilters);
现在我想要的是,每当安装组件时,使用默认过滤器获取数据。但我也想在用户更新过滤器时重新获取数据并点击提交,我会使用新的过滤器获取结果。
由于我还想获取过滤器更新的结果,所以我使用的是 apollo 提供的 useLazyQuery 钩子
const [getData, {data}] = useLazyQuery(GET_DATA_QUERY, { variables: {filters} });
useEffect(getData, []); // this useEffect runs only when the component mounts and never again
但是,每当我的状态 filters 更新时,getData 函数就会自动运行!总是! (幕后)
如何处理这种情况,我想获取挂载和重新渲染的结果。 我曾尝试使用 useQuery 并重新获取它提供的,但我在那里遇到了同样的问题,每当我更新状态时,组件都会重新呈现,并且 useQuery 挂钩会运行并进行调用。 (这就是我相信它的运行方式)
如何修复我当前的代码。在 useEffect 函数中调用 getData 函数使其在每次重新渲染时运行。
我认为我在这个stackoverflow-question 中定义的问题与我的有些相似。
【问题讨论】:
标签: javascript reactjs graphql react-apollo apollo-client