Apollo-link-rest: 新的 {args.id} 样式问题

创建于 2018-07-16  ·  5评论  ·  资料来源: apollographql/apollo-link-rest

你好,

刚刚更新了库并且在升级时遇到了问题。 在没有任何更改的情况下,功能按预期工作,并警告迁移到新样式。 当我进行如下所需的更改时,我发现 {args} 和 {args.name} 都未定义。 这是代码:

const restLink = new RestLink({
  uri: 'https://avoindata.prh.fi/bis/v1',
  typePatcher: {
    BusinessPayload: data => ({
      ...data,
      results: data.results.map(business => ({
        __typename: 'Business',
        ...business
      }))
    })
  }
});

const client = new ApolloClient({
  link: restLink,
  cache: new InMemoryCache()
});

const query = gql`
  query($name: String!) {
    companies(name: $name)
      @rest(
        type: "BusinessPayload"
        path: "?totalResults=false&maxResults=10&resultsFrom=0&name={args.name}"
      ) {
      results {
        name
        businessId
      }
    }
  }
`;

// And then call the query:
client.query({ query, variables: { name: value } });

我错过了什么吗?

blocking bug 🐛 has-reproduction

最有用的评论

在 v0.4.1 中修复: https :

所有5条评论

同样的问题。 刚刚使用新的 {args.id} 样式未定义。

@karensg @ haipengz——这对我来说是一个重要的优先事项,但昨天我在能够完全测试这些更改之前被打断了。

@karensg虽然您的语法应该可以工作(这是一个错误,但它没有),但我希望 api 的使用方式略有不同。
代替: path: "?totalResults=false&maxResults=10&resultsFrom=0&name={args.name}"
我打算是: path: "?totalResults=false&maxResults=10&resultsFrom=0&{args}"

{args}{args.query.deeper}获取键路径指向的对象,然后将其转换为查询字符串。 所以在你的情况下&{args}将是{ name: "foo" }变成&name=foo ,其中 foo 自动获取encodeURIComponent调用它。

我认为这是我的第二个当务之急,但我正在工作中灭火,所以我要到下午才能开始。 总的来说,我感谢你们提供的任何帮助,你可以在 #apollo-link-rest 房间的 ApolloGraphQL slack 中找到我。

真正有用/加速我的修复的一件事是为您正在使用的每种情况提供单元测试的一些代码,因此我可以确保它对您有用。

在 v0.4.1 中修复: https :

@fbartho感谢您的修复! 它现在适用于我的用例。

再次感谢!
升级到 v0.4.1 后,新的 {args.id} 样式现在适用于我的情况,不再未定义。

...
const GET_DOG_IMAGES_BY_BREED = gql`
  query breeds ($breed: String!) {
    imagesByBreed(breed: $breed) @rest(
      type: "imagesByBreedResult"
      path: "breed/{args.breed}/images"
      endpoint: "dogApi"
    ) {
      status
      message
    }
  }
`

...
<Query query={GET_DOG_IMAGES_BY_BREED}
    notifyOnNetworkStatusChange
    variables={{ breed: 'hound' }}
 >
  {({ refetch, error, data, networkStatus, }) => {
    expect(error).toBeUndefined()
    expect(data).toBeDefined()
  }}
</Query>
...

此页面是否有帮助?
0 / 5 - 0 等级