如何在Apollo中为refetchQueries传递变量

时间:2018-04-29 07:03:08

标签: reactjs apollo

我不确定在variables选项中传递refetchQueries的最佳做法是什么。在下面的示例中,变量为{id: this.props.item.id}

但是,this.props.item.id传递了错误,因为MyComponent尚未实例化,因此this.props未定义。

function mapStateToProps(state) {
  return {
    item: state.item
  };
}

MyComponent = connect(mapStateToProps, matchDispatchToProps)(
  MyComponent
);

MyComponent = graphql(createItemImage, {
  name: "createItemImage",
  options: {
    refetchQueries: [
      {
        query: getEntity,
        variables: { id: this.props.item.id }
      }
    ]
  }
  })(MyComponent);

id值仅在运行时可用。

提前致谢!

2 个答案:

答案 0 :(得分:6)

这是最终有效的内容,请参考ownProps,订单(connect语句应 <{strong> graphql声明后

MyComponent = graphql(createItemImage, {
  name: "createItemImage",
  options: ownProps => ({
    refetchQueries: [
      {
        query: getEntity,
        variables: { id: ownProps.item.id }
      }
    ]
  })
})(MyComponent);

MyComponent = connect(mapStateToProps, matchDispatchToProps)(
  MyComponent
);

答案 1 :(得分:1)

您需要将item.id变量显式传递给组件。因此,在函数中添加变量命名id

 MyComponent = graphql(createItemImage, {
  name: "createItemImage",
  options: {
    refetchQueries: [
      {
        query: getEntity,
        variables: { id: id }
      }
    ]
  }
})(MyComponent, id);

export default MyComponent

然后在调用组件时使用以下语法

<MyComponent id={this.props.item.id}>

希望这有帮助