【问题标题】:react-apollo: How to deal with immutability in update and updateQuery?react-apollo:如何处理 update 和 updateQuery 中的不变性?
【发布时间】:2018-07-11 23:57:56
【问题描述】:

我在我的 React 应用程序中使用 react-apollo。现在需要分页来获取更多数据。独立于分页,如何更新updateQueryupdate 中的状态?将深层嵌套的数据结构视为不可变会使其冗长,但我不想为其添加帮助程序库。

fetchMore({
  variables: {
    cursor: cursor,
  },
  updateQuery: (previousResult, { fetchMoreResult }) => {
    return {
      ...previousResult,
      author: {
        ...previousResult.author,
        articles: {
          ...previousResult.author.articles,
          ...fetchMoreResult.author.articles,
          edges: [
            ...previousResult.author.articles.edges,
            ...fetchMoreResult.author.articles.edges,
          ],
        }
      }
    }
  },

改变previousResult 是否可以,还是违背了阿波罗的哲学?

const { pageInfo, edges } = fetchMoreResult.author.articles;
previousResult.author.articles.edges.concat(edges);
previousResult.author.articles.pageInfo = pageInfo;
return previousResult;

或者还有其他更新状态的方法吗?

【问题讨论】:

    标签: apollo react-apollo apollo-client


    【解决方案1】:

    From the docs:

    请注意,该函数不得更改 prev 对象(因为 prev 与返回的新对象进行比较,以查看函数进行了哪些更改,因此需要更新哪些 prop)。

    我会硬着头皮使用immutability-helper,就像文档推荐的那样。除此之外,您可以先制作对象的副本 (Object.assign({}, fetchMoreResult)),然后您可以对副本执行您想要的操作。

    【讨论】:

    • 好的。我不想硬着头皮坚持使用 JavaScript ES6 及更高版本,因为我不想使用另一个不变性库。但是感谢您对不变性的回答!
    猜你喜欢
    • 2020-12-20
    • 2017-03-21
    • 1970-01-01
    • 2020-10-09
    • 2018-01-28
    • 2018-08-01
    • 2018-06-09
    • 2017-12-29
    • 1970-01-01
    相关资源
    最近更新 更多