使用 apollo 改变数组
Mutating an array with apollo
我有一个具有这种突变类型的服务器端模式
type Mutation {
updateSettings(settings: SettingsInput): Settings
}
input SettingsInput {
repositories: [RepositoryInput]
}
input RepositoryInput {
id: String
name: String
url: String
}
如果我使用像 Altair 这样的客户端,我可以完全按照我想要的方式改变它,通过这个查询:
mutation{
updateSettings(settings: {
repositories: [
{
name: "name1"
url: "url1"
},
{
name: "name2"
url: "url2"
}
]
}){
repositories {
id
name
url
}
}
}
但是我在使用 Apollo 时很难让它正常工作
我能得到的最好的就是这个
import { SubscriptionClient } from "subscriptions-transport-ws";
import { gql } from "apollo-boost";
import { WebSocketLink } from "apollo-link-ws";
const wsClient = new SubscriptionClient("ws://localhost:5001/graphql", {
reconnect: true
});
const client = new WebSocketLink(wsClient);
const UPDATE_SETTINGS = gql`
mutation UpdateSettings($settings: SettingsInput) {
updateSettings(settings: $settings) {
repositories {
id
name
url
}
}
}
`;
client
.request({
query: UPDATE_SETTINGS,
variables: { repository: [{name: "name1", url:"url1"},
{name: "name2", url:"url2"}]}
})
我显然遗漏了一些东西。客户端似乎不知道服务器 SettingsInput
,但我真的不知道如何为客户端创建一个将复杂对象或数组作为变量的查询。
我是不是以一种完全奇怪的方式来解决这个问题,或者我该如何从 apollo 客户端向服务器发送 "complex" 突变?
除了客户端,您还需要修复您传入的 variables
对象。您在操作中定义的变量名为 settings
,但您只是传入一个名为 repository
的变量。此外,此变量的形状与架构中显示的 SettingsInput
不匹配。 variables
应该类似于:
const variables = {
settings: {
repositories: [
{
name: 'name1',
url: 'url1'
},
{
name: 'name2',
url: 'url2'
},
],
},
}
我有一个具有这种突变类型的服务器端模式
type Mutation {
updateSettings(settings: SettingsInput): Settings
}
input SettingsInput {
repositories: [RepositoryInput]
}
input RepositoryInput {
id: String
name: String
url: String
}
如果我使用像 Altair 这样的客户端,我可以完全按照我想要的方式改变它,通过这个查询:
mutation{
updateSettings(settings: {
repositories: [
{
name: "name1"
url: "url1"
},
{
name: "name2"
url: "url2"
}
]
}){
repositories {
id
name
url
}
}
}
但是我在使用 Apollo 时很难让它正常工作
我能得到的最好的就是这个
import { SubscriptionClient } from "subscriptions-transport-ws";
import { gql } from "apollo-boost";
import { WebSocketLink } from "apollo-link-ws";
const wsClient = new SubscriptionClient("ws://localhost:5001/graphql", {
reconnect: true
});
const client = new WebSocketLink(wsClient);
const UPDATE_SETTINGS = gql`
mutation UpdateSettings($settings: SettingsInput) {
updateSettings(settings: $settings) {
repositories {
id
name
url
}
}
}
`;
client
.request({
query: UPDATE_SETTINGS,
variables: { repository: [{name: "name1", url:"url1"},
{name: "name2", url:"url2"}]}
})
我显然遗漏了一些东西。客户端似乎不知道服务器 SettingsInput
,但我真的不知道如何为客户端创建一个将复杂对象或数组作为变量的查询。
我是不是以一种完全奇怪的方式来解决这个问题,或者我该如何从 apollo 客户端向服务器发送 "complex" 突变?
除了客户端,您还需要修复您传入的 variables
对象。您在操作中定义的变量名为 settings
,但您只是传入一个名为 repository
的变量。此外,此变量的形状与架构中显示的 SettingsInput
不匹配。 variables
应该类似于:
const variables = {
settings: {
repositories: [
{
name: 'name1',
url: 'url1'
},
{
name: 'name2',
url: 'url2'
},
],
},
}