我尝试在react项目中将变量传递给我的突变。它是有效静态代码:
const EDIT_WORD = gql`
mutation {
editWord(
eng_word: "apple"
data: { eng_word: "apple1", ru_word: "яблоко1" }
) {
eng_word
}
}
...
const [editWordHook] = useMutation(EDIT_WORD);
...
editWordHook();
这是有一些错误的代码:
const EDIT_WORD = gql`
mutation($eng_word: String!, $data: wordInput!) {
editWord(
eng_word: $eng_word
data: { eng_word: $eng_word, ru_word: $ru_word }
) {
eng_word
}
}
`;
...
const [editWordHook] = useMutation(EDIT_WORD);
...
editWordHook({
variables: {
eng_word: editedWord,
data: {
eng_word: englishWordText,
ru_word: russianWordText,
},
},
});
我尝试了
而不是[$ data:wordInput!]$data: { $eng_word: String!, $ru_word: String! }
但是没有帮助...错误日志没有提供任何有价值的信息:
// value or the constructed error will be meaningless.
> 46 | constructor({
| ^ 47 | graphQLErrors,
48 | networkError,
49 | errorMessage,
已经用了10个小时,找不到错误...
答案 0 :(得分:1)
感谢所有尝试帮助我的人!我放弃了,将架构更改为更丑的版本...
editWord(
edited_eng_word: String!
new_eng_word: String!
new_ru_word: String!
): Word!
现在,它不需要对象并且可以工作。 ...我讨厌graphQl
答案 1 :(得分:1)
我和你有同样的问题。 我找到了解决方法。
const EDIT_WORD = gql`
mutation($eng_word: String!, $data: wordInput!) {
editWord(
eng_word: $eng_word,
data: $data
) {
eng_word
}
}
`;
您可能必须这样做。 并调用此突变时,请执行以下操作:
editWord({
variables: {
eng_word: 'XXX'
data: {
eng_word: "YYY",
ru_word: "ZZZ",
}
}
}).then(
).catch(
)
希望这对您有帮助
答案 2 :(得分:0)
您传递变量
{ eng_word: editedWord,
data: {
eng_word: englishWordText,
ru_word: russianWordText,
}
}
进入您的editWordHook
函数,但是您的EDIT_WORD
突变却没想到。
const EDIT_WORD = gql`
mutation($eng_word: String!, $data: wordInput!) {
editWord(
eng_word: $eng_word
data: { eng_word: $eng_word, ru_word: $ru_word }
) {
eng_word
}
}
`;
您的EDIT_WORD
突变没有必需的参数
const EDIT_WORD = gql`
mutation($eng_word: String!, $data: wordInput!) {
editWord(
eng_word: $eng_word
data: { eng_word: $eng_word, ru_word: $ru_word }
) {
eng_word
}
}
`;
如您所见,变异输入参数为$eng_word: String!
和$data: wordInput!
,但您在其中使用了$ru_word
。
如果您的data
变量对应于wordInput!
类型,请尝试使用整个数据对象进行突变
const EDIT_WORD = gql`
mutation($eng_word: String!, $data: wordInput!) {
editWord(
eng_word: $eng_word
data: $data
) {
eng_word
}
}
`;
答案 3 :(得分:-1)
这是一个当您想将对象作为变量传递时的变更请求示例
const CREATE_GAME = gql`
mutation createGame($game: CreateGameInput!) {
createGame(input: $game) {
name
}
}
`;
const [createGameDB] = useMutation(CREATE_GAME);
await createGameDB({ variables: {game: preparedGameToDb}})
CreateGameInput 它是您在服务器上定义的输入。就我而言,它看起来像那样
@InputType()
export class CreateGameInput {
@Field(() => String)
name: String;
@Field(type => [TeamInput], { nullable: true })
teams: TeamInput[];
@Field(type => [MemberInput], { nullable: true })
members: MemberInput[]
@Field(type => [GameWordInput], { nullable: true })
words: GameWordInput[];
}