中继突变期望中继获取的数据
Relay mutation expects data fetched by Relay
我有两个要嵌套的中继突变,首先添加一个对象,然后设置它的名称。我相信我传递给第二个突变的实际上是中继获取的数据,但它似乎不同意我的看法。 React视图中的代码如下:
Relay.Store.update(
new AddCampaignFeatureLabelMutation({
campaign: this.props.campaign
}),
{
onSuccess: (data) => {
Relay.Store.update(
new FeatureLabelNameMutation({
featureLabel: data.addCampaignFeatureLabel.featureLabelEdge.node,
name: this.addLabelInputField.value
})
);
},
onFailure: () => {}
}
);
这确实有效,但给了我一个警告:
Warning: RelayMutation: Expected prop `featureLabel` supplied to `FeatureLabelNameMutation` to be data fetched by Relay. This is likely an error unless you are purposely passing in mock data that conforms to the shape of this mutation's fragment.
为什么 Relay 认为没有获取到数据?我可能需要以某种方式显式 return 有效负载中的新 featureLabel 吗?
Relay 期望您的突变的任何片段都来自您的 props
。由于您使用的是来自回调的 data
而不是来自容器 props 的东西,因此 Relay 会引发该警告。
查看来源:https://github.com/facebook/relay/blob/master/src/mutation/RelayMutation.js#L289-L307
我 运行 遇到了同样的问题,我花了一些时间才弄清楚发生了什么,所以这可能会对其他人有所帮助:
如警告所述,您必须为中继获取的突变提供实体。但是警告没有说明的是必须在考虑突变的情况下获取它。
所以基本上你必须像这样在初始查询中添加你将来要对其执行的突变:
fragment on Person {
firstname,
lastname,
language,
${UpdatePersonMutation.getFragment('person')}
}
这将向商店中的实体添加突变所需的必要部分。
在您的情况下,您需要做的是将 FeatureLabelNameMutation
getFragment
添加到您的 AddCampaignFeatureLabelMutation
查询中。这将带回您的 featureLabel
实体,其中包含必要的信息,以便 FeatureLabelNameMutation
在没有警告的情况下成功。
Relay 文档在这方面和许多其他方面非常差。
我有两个要嵌套的中继突变,首先添加一个对象,然后设置它的名称。我相信我传递给第二个突变的实际上是中继获取的数据,但它似乎不同意我的看法。 React视图中的代码如下:
Relay.Store.update(
new AddCampaignFeatureLabelMutation({
campaign: this.props.campaign
}),
{
onSuccess: (data) => {
Relay.Store.update(
new FeatureLabelNameMutation({
featureLabel: data.addCampaignFeatureLabel.featureLabelEdge.node,
name: this.addLabelInputField.value
})
);
},
onFailure: () => {}
}
);
这确实有效,但给了我一个警告:
Warning: RelayMutation: Expected prop `featureLabel` supplied to `FeatureLabelNameMutation` to be data fetched by Relay. This is likely an error unless you are purposely passing in mock data that conforms to the shape of this mutation's fragment.
为什么 Relay 认为没有获取到数据?我可能需要以某种方式显式 return 有效负载中的新 featureLabel 吗?
Relay 期望您的突变的任何片段都来自您的 props
。由于您使用的是来自回调的 data
而不是来自容器 props 的东西,因此 Relay 会引发该警告。
查看来源:https://github.com/facebook/relay/blob/master/src/mutation/RelayMutation.js#L289-L307
我 运行 遇到了同样的问题,我花了一些时间才弄清楚发生了什么,所以这可能会对其他人有所帮助:
如警告所述,您必须为中继获取的突变提供实体。但是警告没有说明的是必须在考虑突变的情况下获取它。
所以基本上你必须像这样在初始查询中添加你将来要对其执行的突变:
fragment on Person {
firstname,
lastname,
language,
${UpdatePersonMutation.getFragment('person')}
}
这将向商店中的实体添加突变所需的必要部分。
在您的情况下,您需要做的是将 FeatureLabelNameMutation
getFragment
添加到您的 AddCampaignFeatureLabelMutation
查询中。这将带回您的 featureLabel
实体,其中包含必要的信息,以便 FeatureLabelNameMutation
在没有警告的情况下成功。
Relay 文档在这方面和许多其他方面非常差。