我有以下突变:
export default class AddTaskMutation extends Relay.Mutation {
static fragments = {
classroom: () => Relay.QL`
fragment on Classroom {
id,
}`,
};
getMutation() {
return Relay.QL`mutation { addTask }`;
}
getFatQuery() {
return Relay.QL`
fragment on AddTaskPayload {
classroom {
taskList,
},
taskEdge,
}
`;
}
getConfigs() {
let rangeBehaviors = {};
let member_id = 'hasNewMessages(true) member_id(' + Global.fromGlobalId(this.props.createdByMember)['id'] + ')';
rangeBehaviors[''] = 'append';
rangeBehaviors['hasToDo(true)'] = 'append';
rangeBehaviors['hasToDo(false)'] = 'append';
rangeBehaviors['isStart(true)'] = 'ignore';
rangeBehaviors['isStart(false)'] = 'append';
rangeBehaviors[`${member_id}`] = 'append';
rangeBehaviors['hasNewMessages(true) member_id(null)'] = 'ignore';
return [
{
type: 'RANGE_ADD',
parentName: 'classroom',
parentID: this.props.classroomId,
connectionName: 'taskList',
edgeName: 'taskEdge',
rangeBehaviors,
}
];
}
getVariables() {
return {
title: this.props.title,
instruction: this.props.instruction,
start_date: this.props.start_date,
end_date: this.props.end_date,
is_archived: this.props.is_archived,
is_published: this.props.is_published,
is_preview: this.props.is_preview,
productId: this.props.productId,
classroomId: this.props.classroomId,
createdByMember: this.props.createdByMember,
subTasks: this.props.subTasks,
students: this.props.students,
};
}
}
运行我的应用程序时,我收到以下2条警告:
warning.js:44警告:RelayMutation:与ID
taskList{hasNewMessages:true,member_id:null}
对应的突变字段classroom
上的连接Classroom:35
与您的RANGE_ADD配置中指定的任何rangeBehaviors
不匹配。这意味着整个连接将被重新提取。为该突变配置范围行为,以便仅获取新边缘并启用乐观突变,或使用refetch
抑制此警告。和
warning.js:44警告:不建议将
null
用作rangeBehavior值。使用ignore
避免重新获取范围。由于其他
rangeBehaviors
工作,因此我假设在一种行为中声明2个变量时必须存在语法错误-在这种情况下为hasNewMessages
和memeber_id
。我一直在寻找答案,但是找不到。该文档似乎也没有涵盖这种情况。
编辑:我也尝试了
rangeBehaviors['hasNewMessages(true),member_id(null)'] = 'ignore';
(逗号作为分隔符),但没有成功。 最佳答案
检查中继的源代码(文件RelayMutationQuery.js
)后,我可以看到它在所有rangeBehaviors
的数组中搜索的数组键。然后,我可以将代码更新为正确的格式。
由于我没有在网上找到有关这种极端情况的任何信息,因此我将在此处发布我的解决方案-也许将来有人会觉得有用。
当rangeBehavior
具有2个(或更多)变量时,需要用句点(.
)分隔它们。另外,传递null
时,您不会显式传递它-只需从其'变量中忽略它即可。
例如:
对:
rangeBehaviors['hasNewMessages(true).member_id()'] = 'ignore';
错误:
rangeBehaviors['hasNewMessages(true),member_id(null)'] = 'ignore';