Str*_*ler 5 javascript apollo graphql apollo-server react-apollo
大约一年前,对apollo-server(或react-apollo?)进行了更新,这完全打破了 GraphQL 请求中省略可空输入的旧用法。
在更新之前,您可以定义如下内容:
Mutation {
editProfile(id: ID!, name: String, avatar: String)
}
Run Code Online (Sandbox Code Playgroud)
当调用省略输入的客户端时,请说:
editProfile(id: "whateverid", name: "James")
Run Code Online (Sandbox Code Playgroud)
你在你的解析器中得到avatar了undefined。
现在已设置为null.
问题是:null例如,对于某些可选输入来说 是一个完全有效的值avatar。所以基本上,我们在这个过程中丢失了信息,并且不再能够区分服务器端之间的区别:
null(=不更新数据库),以及null(= 更新数据库)的可选输入我在 Github 上打开了一个关于它的线程:https ://github.com/apollographql/apollo-server/issues/2056
一年前,另一个人在react-apolloGithub 上做了同样的事情: https: //github.com/apollographql/react-apollo/issues/1569
dacz 发布了一个有趣的回复,总结得很好:
当可空输入未出现在 apollo 客户端的查询变量中时,将使用空值进行调用。客户端不应将整个输入作为 null 传递,而应完全省略它或以 undefined 传递它。传递 null 可能意味着显式将输入设为 null。同样适用于输入字段,因此服务器可能会对显式重置值做出反应(在输入中显示为 null,或者如果省略则不处理它)。
这两个线索仍然悬而未决。
有人对此有任何干净的解决方案吗?