使用 react-apollo 将变量传递给 graphql 查询

Passing variables to graphql query with react-apollo

我在将变量选项传递到 graphql 查询时遇到问题。如果 console.log(ownProps.match.params.id) 我得到正确的 ID。

但是我收到这个错误:

Error: The operation 'selectCustomer' wrapping 'Apollo(Apollo(withRouter(Consumer)))' is expecting a variable: 'id' but it was not found in the props passed to 'Apollo(Apollo(Apollo(withRouter(Consumer))))'

导出

const ConsumerWithMutations =  graphql(selectCustomer, {
  name : 'selectCustomer',
  options: (ownProps) => ({
    variables: {
      id: ownProps.match.params.id
    }
  })
})(graphql(deleteCustomer, {
  name: 'deleteCustomer'
})(withRouter(Consumer)))

export default graphql(selectCustomer)(ConsumerWithMutations);

查询

const selectCustomer = gql`
query selectCustomer($id: String!)
{
  consumer(id: $id) {
    id
    firstname
    lastname
    dateOfBirth
    ...

您试图用相同的查询 HOC 包装您的组件两次 - 第一次在您的 ConsumerWithMutations 定义中,然后再次在您的导出语句中。

您没有将任何选项传递到导出语句中的 HOC,因此您的 selectCustomer 查询无法找到您指定的 id 变量,这就是您看到错误的原因得到了。

将导出语句修改为:

export default ConsumerWithMutations;

它应该可以工作。

我还强烈建议您在像这样使用多个 HOC 时使用 compose——它有助于保持代码的可读性。查看示例 here.