Apollo:如何在UpdateQuery中对订阅结果进行排序?



这是一个有效的Apollo订阅处理程序:

componentDidMount() {
const fromID = Meteor.userId();
const {toID} = this.props;
this.toID = toID;
this.props.data.subscribeToMore({
document: IM_SUBSCRIPTION_QUERY,
variables: {
fromID: fromID,
toID: toID,
},
updateQuery: (prev, {subscriptionData}) => {
if (!subscriptionData.data) {
return prev;
}
const newIM = subscriptionData.data.IMAdded;
// don't double add the message
if (isDuplicateIM(newIM, prev.instant_message)) {
return previousResult;
}
return update(prev, {
instant_message: {
$push: [newIM],
},
});
}
});
}

instant_message是要显示的对象数组。每个对象都包含一个日期字段。我需要按日期对此数组中的对象进行排序。

这种方法曾经适用于 Apollo 的测试版:

//update returns a new "immutable" list
const instant_message = update(previousResult, {instant_message: {$push: [newAppt]}});
instant_message.instant_message = instant_message.instant_message.sort(sortIMsByDateHelper);
return instant_message;

我可以对数组进行排序,但 Apollo 对返回的对象抛出错误——例如,当render例程需要它时,它在 props 中找不到。

updateQuery返回排序数组的正确方法是什么?提前感谢大家提供任何信息。

事实证明,导致异常的不是排序。 如果返回对象的__TYPENAME与此处的其他内容不匹配,则订阅似乎会失败 - 此例程中使用的varname(上面代码中的"instant_message"(,或者props渲染函数返回的对象数组的varname。排列所有这些东西,使它们相同可以解决它。

最新更新