【问题标题】:Calling setVariables is forcing a refetch from the server instead of using the cached results?调用 setVariables 是强制从服务器重新获取而不是使用缓存的结果?
【发布时间】:2017-04-02 11:42:31
【问题描述】:

我试图在一个表中多次呈现一个组件(即每个表行一个组件实例)。组件需要设置一个 Relay 变量来决定如何渲染组件的内容。

我通过在组件的 componentWillMount 生命周期事件中调用 this.props.relay.setVariables 来设置此变量。在我的特定情况下,每个组件最终都需要来自服务器的相同数据集,因此我希望第一个调用 this.props.relay.setVariables 的组件会导致新的获取来自服务器,但表中的每个后续组件将简单地使用从第一个组件获取的结果,因为生成的查询对于表中的每个组件都是完全相同的。

但是,实际发生的情况是对表中的每个组件都进行了一次新的提取,这对性能来说很糟糕。有没有办法告诉 Relay 重用原始提取?我认为它应该通过缓存查询来自动执行此操作。

仅供参考...查询正在通过 node 接口,并且片段类型是接口图类型。

【问题讨论】:

    标签: reactjs graphql relayjs


    【解决方案1】:

    每个项目的查询结构或数据是否相同都没有关系。项目由 ID 缓存,如果 ID 不同(我们知道,节点接口需要 ID),Relay 需要每个 ID 的数据。

    为什么是 ID?因为这可以实现数据扁平化并导致更有效和更精细的缓存。它还允许 Relay 进行有效的 diffing,这意味着只请求每个 ID 缺少的字段。


    如果在您的特定情况下,每个组件最终都需要相同的数据集,请考虑为父组件使用单个中继容器并将相同的数据传递到每一行。问题解决了!

    【讨论】:

    • 是的...该信息已得到确认。不幸的是,父组件必须完成这项工作,因为它现在需要了解数据/创建它不直接使用的 Relay 变量。这会在组件之间创建一些原本不需要的链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-26
    • 2014-05-03
    • 2016-10-26
    • 2014-10-13
    • 1970-01-01
    • 2021-04-12
    • 1970-01-01
    相关资源
    最近更新 更多