我在一个相当大的React应用程序中广泛使用Apollo,我发现自己多次面临相同的限制。
我想仅在组件挂载时执行查询,以便更改此组件子路由不会重新触发查询。我也真的想保留容器模式,我在容器中声明我的查询,包装我的组件并忘记它,以便我的组件本身保持清洁任何Apollo的东西。
到目前为止,我已经能够通过制作我自己的Apollo高阶组件来实现这一点,该组件接受组件,查询及其选项,并返回一个新组件,该组件将自动在componentDidMount上运行queryData。 Here's the code。然后我以这种方式使用它:apolloQueryHOC(MyComponent, queryOptions);
但是在一个新的组件上我开始实现分页,这种方法对于我实现的复杂的分页逻辑来说根本不起作用/变得太难看了。问题是,当我使用基本的Apollo容器方法时,它就像一个魅力。但它会在每次路线/道具变化时运行。
所以我的问题是,有没有办法只在mount上运行“容器”查询,而不是使用withApollo
等?
答案 0 :(得分:2)
啊,问题实际上是我在中间件中处理auth,所以我的查询有'作为令牌,并且令牌从indexedDB获取并添加到中间件中的查询中,覆盖''。 因此,存储在Apollo存储中的查询结果(使用适当的令牌作为参数)永远不会将查询与''作为标记匹配,从而导致Apollo一次又一次地从服务器查询。