reactjs - React Apollo (GraphQL):如何阻止查询组件在每次状态更改时重新获取
问题描述
我有一个 React 组件,其中有一个 react-apollo Query 组件,它使用 graphql 基于一些过滤器(钩子)获取数据,这些过滤器(钩子)在包含查询组件的同一组件内进行管理。所需的功能是仅在与查询组件关联的状态之一发生更改(即应用过滤器)时重新获取数据,但目前,在我提到的包装器反应组件内的任何状态更改时,查询组件都重新获取数据并进入加载状态以执行此操作。例如。假设查询组件依赖于钩子 A、B、C。现在有第四个钩子 D 会更改页码,在该钩子更改时,查询组件不应重新获取数据。
const MyComponent = () => {
const [a, setA] = useState([]);
const [b, setB] = useState([]);
const [c, setC] = useState([]);
const [d, setD] = useState([]);
const [pageNo, setPageNo] = useState(0);
return (
<div className="wrapper">
<button onClick={()=> setPageNo(pageNo === 1 ? 2 : 1)}>
{pageNo === 1 ? 'Next' : 'Previous'}
</button>
<div className="left">
{
pageNo === 1 ? (
//Some dropdown -> setA([...whatever] //Some logic)
//Some dropdown -> setB([...whatever] //Some logic)
) : pageNo === 2 ? (
//Some dropdown -> setC([...whatever] //Some logic)
//Some dropdown -> setD([...whatever] //Some logic)
)
}
</div>
<div className="right">
<Query
query={SOME_QUERY}
variables={{
filters: {
typeA: A,
typeB: B,
typeC: C,
typeD: D,
}
/>
{
({loading, error, data}) => {
if(error) return <div>Error...</div>
if(loading) return <div>Loading...</div>
return (
//Perform some computation on data & display in a table
)
}
}
</Query>
</div>
</div>
)
}
以上是实际代码的结构。我面临的问题是,虽然更改 A、B、C 或 D 应该使查询组件相应地重新获取数据,但不应该更改页面。但是在更改页面时,查询组件会进入加载状态。
解决方案
推荐阅读
- angular - 具有可为空字符串的角度光滑网格复杂对象
- javascript - 如何使用 jquery 检测对话框是否已打开?
- java - 为什么没有出现 AWT 框架的文本字段?
- tensorflow - 缺少输入数据
- flutter - 颤振错误:“对象?”类型的值 不能分配给“字符串”类型的变量
- java - 如何从 Eclipse 中删除 Lombok。与 Eclipse 上的 F11 相关的问题
- flutter - 当我在 Flutter 中将文本字段设置为下一行时,文本会上升
- lua - 数组列表帮助作弊引擎
- openstack - 在单节点上安装 Openstack
- python - LSTM 在 Keras 嵌入模型中不起作用