2

所以我有这样的 Apollo 查询组件:

<Query
    fetchPolicy='network-only' // also tried without and with 'no-cache'
    query={GET_MENUS}
    variables={{
        foo // This has the default value of the state
    }}
>
    {({ loading, error, data, refetch }) => {

      // Display Data here

      // We have an Imput here that can change the State of Bar in the parent Component
      <Button
          onPress={() => {
              /*refetch({
                  foo: { bar}
              }); */
              setBar(blubb); // I am using react hooks (useState)
          }}
          text='Refresh!'
      />
      }
    )}
</Query>

我尝试使用 refetch 方法重新获取,也只是更新状态。实际上,我检查了 Apollo 服务器,在这两种方法中,新变量都通过了,但新数据没有更新。有趣的是,如果我只是在状态中使用另一个默认值,它就可以正常工作。我也尝试了不同的获取策略,但没有任何运气。

我认为它应该是非常基本的,但到目前为止我还没有找到任何解决方案......

那么如何使用我的新变量获取数据呢?

编辑:

GET_MENUS 有点复杂,但这就是全部。我将变量传递给不同的解析器,因为它们是嵌套的。Foo Bar thingy 是“每日”变量

const GET_MENUS = gql`
    query getMenus($lat: Float!, $lng: Float!, $daily: Daily) {
        getMenus(lat: $lat, lng: $lng) {
            distance
            location {
                _id
                street
                streetNumber
                plz
                city
                coordinates
                shopIDs {
                    name
                    togo
                    shopType
                    menus(daily: $daily) {
                        _id
                        name
                        price
                        hot
                        sweet
                        togo
                        allergies
                        components
                    }
                }
            }
        }
    }
`;
4

1 回答 1

0

我在 Apollo 3.0 中使用变量重新获取的解决方案:

import { gql, useApolloClient } from "@apollo/client";

const client = useApolloClient();

const SEARCH_PROJECTS = gql``

await client.query({
          query: SEARCH_PROJECTS,
          variables: { page: 1, limit: 1 },
          notifyOnNetworkStatusChange: true,
          fetchPolicy: "network-only"
})

在此处此处查看有关获取策略的更多信息。

我的上下文如下:我获取项目列表,然后用户可以删除或更新项目。项目列表、项目、更新和删除是不同的组件。Apollo 提供的默认刷新不允许我发送项目分页的变量,因此当我删除或更新项目时,我会手动刷新它,而无需创建可以使用刷新或获取更多内容的结构组件“项目列表”中的选项

于 2020-09-26T05:50:27.927 回答