我正在使用Apollo-Client与GraphQL后端(PHP)配合使用,并且遇到了一些突变问题。
我正在使用的当前组件集是用于用户详细信息的表单。可以使用查询来获取和显示详细信息,并且可以对其进行编辑和保存。当用户保存时,将检查以决定哪些值已更改,并通过要更新的突变发送这些值。
我遇到的问题是,我只想将已更新的数据从突变中返回,因为返回可能已更新的每个字段都会增加响应时间。有没有一种方法可以动态构建突变来决定返回哪些字段?
这里是当前状态下的突变:
const UPDATE_CLIENT = gql`
mutation updateClient( $data: [ClientInput]! ) {
add_update_clients( data: $data ) {
id
ref
name {
title
firstname
surname
preferred_name
}
gender
dob
nhs_number
email
telephone {
number
}
mobile {
number
}
region {
id
name
}
referral_received
user_aware_of_referral
referred_for {
id
name
}
weekly_hours
contract_date
service_start_date
expected_end_date
service_end_date
reason_left
po_number
accounting_ref
country_of_birth {
id
name
}
nationality {
id
name
}
ni_number
place_of_birth
ethnicity {
id
name
}
first_language {
id
name
}
religion {
id
name
}
marital_status
dependants
sexual_orientation
height
weight
hair_colour
eye_colour
}
}
`;
还有一小段代码提交
const mutation = await client.mutate({
mutation: UPDATE_CLIENT,
variables: { data },
errorPolicy: 'all'
});
但是从本质上讲,如果我更新dob
,那么那是我在响应中唯一想要的数据
答案 0 :(得分:0)
您可以使用@skip
或@include
伪指令来指定应从选择集中省略的字段。如果您要跟踪哪些字段已在客户端进行了更新,则可以使用这些值创建一组变量以传递给查询。
mutation updateClient(
$data: [ClientInput]!
$includeGender: Boolean = false
$includeDob: Boolean = false
$includeEmail: Boolean = false
# ... and so on
) {
add_update_clients( data: $data ) {
gender @include(if: $includeGender)
dob @include(if: $includeDob)
email @include(if: $includeEmail)
# ... and so on
}
}