我有以下突变:
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
与指定的rangeBehaviors
中的任何一个都不匹配在您的RANGE_ADD配置中。这意味着将重新获取整个连接。配置此突变的范围行为,以便仅获取新边缘并启用乐观突变,或使用refetch
压制此警告。
和
warning.js:44警告:不建议使用
null
作为rangeBehavior值。使用ignore
以避免重新获取范围。
由于其他rangeBehaviors
工作,我认为在一个行为中声明2个变量时必定会出现语法错误 - 在这种情况下hasNewMessages
和memeber_id
。
我已经找到了答案,但我找不到任何答案。这些文档似乎也没有涵盖这种边缘情况。
编辑:我也试过rangeBehaviors['hasNewMessages(true),member_id(null)'] = 'ignore';
(逗号作为分隔符),但没有成功。
答案 0 :(得分:2)
在检查了Relay(文件RelayMutationQuery.js
)的源代码后,我可以看到它在所有rangeBehaviors
的数组中搜索的数组键。然后我可以将我的代码更新为正确的格式。
由于我还没有在网上找到关于此边缘案例的任何内容,我将在此处发布我的解决方案 - 也许有人会发现它在将来会有所帮助。
如果rangeBehavior
有2个(或更多)变量,则需要用句点(.
)分隔它们。此外,在通过null
时,您没有明确地通过它 - 只需将其从“'”中删除即可。变量
例如:
rangeBehaviors['hasNewMessages(true).member_id()'] = 'ignore';
rangeBehaviors['hasNewMessages(true),member_id(null)'] = 'ignore';