分页组件不需要初始查询

Posted

技术标签:

【中文标题】分页组件不需要初始查询【英文标题】:Paginating component doesn't need initial query 【发布时间】:2017-07-21 01:22:20 【问题描述】:

我希望一个组件从其父组件接收其初始数据,同时仍然能够自行对数据进行分页。

例如,考虑

<Parent> //Makes initial GraphQL call
  <StaticChild/> //Uses initial data and never needs to rerender
  <DynamicChild/> //Paginates the same query that the Parent made, will need to rerender for every new "page"
</Parent>

&lt;DynamicChild&gt; 会是什么样子?我的理解是,为了能够访问 fetchMore(用于分页),您必须将 &lt;DynamicChild&gt; 包装在 graphql 函数中(来自 react-apollo)。但是 graphql 函数需要一个初始查询,而 &lt;DynamicChild&gt; 不需要这样做。我的选择似乎是:

a) 让&lt;Parent&gt; 处理分页。这意味着我必须向 &lt;StaticChild&gt; 添加一个 shouldComponentUpdate 方法。

b) 让 &lt;DynamicChild&gt; 进行与 &lt;Parent&gt; 类似的初始查询,并依靠 Apollo 从 Redux 存储中提取第二个查询(假设这两个查询不会一起批处理)。

c) 让&lt;Parent&gt; 进行初始查询并将 fetchMore() 回调传递给&lt;DynamicChild&gt;。我担心当&lt;DynamicChild&gt; 使用回调时,它仍然会尝试重新渲染&lt;Parent&gt;

虽然这些解决方案很简单,但有没有办法让&lt;DynamicChild&gt; 定义自己的分页查询而不定义自己的初始查询?

【问题讨论】:

【参考方案1】:

作为重新获取功能的示例,您可以查看使用 GraphQL 和 apollo 客户端 (feed page) 制作的应用的提要页面。

截至 b) 我认为它会在第一次进入页面时获取两次查询。我有一个类似的问题,查询是在父级和子级中获取的。

我认为你在 c) 中是对的,在调用 fetchMore 后它将重新呈现父级

【讨论】:

您发布的这个解决方案本质上是情况(b)。在第 44 行,该组件被赋予 FEED_QUERY 作为其初始查询。这就是我想要避免的。 我认为它的解决方案 c) 提要页面使用了 Feed 组件,该组件获得了 onLoadMore => fetchMore 功能。来自父母。

以上是关于分页组件不需要初始查询的主要内容,如果未能解决你的问题,请参考以下文章

UserList.vue组件中用钩子函数初始化第一页的分页数据

antd 封装弹窗编辑组件 分页组件

DRF ---- 过滤组件 分页组件 过滤组件插件使用

vue+element UI实现分页组件

Element ui 表格(Table)组件中前端实现数据分页和模糊查询

vue组件 下拉框分页