将函数结果传递给 graphql 突变
Posted
技术标签:
【中文标题】将函数结果传递给 graphql 突变【英文标题】:Pass function result into graphql mutation 【发布时间】:2019-05-12 04:15:36 【问题描述】:我的checker()
函数确定用户的输入 (checkedNumber) 在我的素数数据库中是否匹配。如果有,我需要 updateCheckedNumber()
运行,以便 checkedNumber.matchingPrime
使用该质数更新。我不知道如何将质数传递给突变。
这是我的组件的代码。目前,我正在硬编码 matchingPrime
以更新为“100”。这正确反映在数据库中。
class Prime extends Component
updateCheckedNumber = async (checkedNumber) =>
await this.props.updateCheckedNumber(
variables:
id: checkedNumber.id,
matchingPrime: checkedNumber.matchingPrime
,
update: store =>
const data = store.readQuery( query: CheckedNumbersQuery );
data.checkedNumbers = data.checkedNumbers.map(
x =>
x.id === checkedNumber.id
?
...checkedNumber, matchingPrime: "100"
: x
);
store.writeQuery( query: CheckedNumbersQuery, data );
)
checker = () =>
let primes = (this.props.data.primeNumbers)
let nums = this.props.checkedNumbersFromParent;
let recentCheckedObject = (nums[nums.length - 1]);
let recentCheckedNumber = (nums[nums.length - 1].text);
let recentCheckedRegExp = new RegExp(recentCheckedNumber);
for (var i in primes)
let count = 0;
if (primes[i].text.search(recentCheckedRegExp) >= 0 && count < 1)
count = count + 1;
this.updateCheckedNumber(recentCheckedObject);
这是我的服务器端的解析器:
const resolvers =
Query:
primeNumbers: () => PrimeNumber.find(),
checkedNumbers: () => CheckedNumber.find()
,
Mutation:
createCheckedNumber: async (_, text) =>
const checkedNumber = new CheckedNumber(text, matchingPrime: "nada");
await checkedNumber.save();
return checkedNumber;
,
updateCheckedNumber: async (_, id, matchingPrime) =>
await CheckedNumber.findByIdAndUpdate(id, matchingPrime);
return true;
,
非常感谢您查看此内容。
【问题讨论】:
你在用react-apollo
吗?
是的,我正在使用 react-apollo
因为需要房间,我将发布一个答案。它可能无法一劳永逸地解决它。
明白。非常感谢,凯尔。
【参考方案1】:
我看到您有一个解析器,但我没有看到您的 updateCheckedNumber
解析器的架构。给定您的解析器,我们可以制作如下架构:
##updateCheckedNumber.graphql
type Prime
id: String
value: Number
type Mutation
updateCheckedNumber(id: String!, matchingPrime: Number!): Prime
现在您将需要一个查询字符串,您可以将其作为道具传递到您的反应组件中。我们可以使用来自graphql-tag
的gql
来做到这一点,如下所示:
const updateCheckedNumber = gql`
mutation updateCheckedNumber($id: String!, $matchingPrime: Number!)
updateCheckedNumber(id: $id, matchingPrime: $matchingPrime)
id,
value
`
现在我们需要用来自react-apollo
的graphql
包装我们的反应组件,如下所示:
export default graphql(updateCheckedNumber,
name: 'updateCheckedNumber'
)(MyReactComponent)
现在在你的 react 组件中,你可以访问 props.updateCheckedNumber
,你可以这样称呼它:
props.updateCheckedNumber(
variables:
id: theId,
matchingPrime: theCheckedNumber
)
希望这会有所帮助!
附:如果您有一个提供素数列表的查询,例如primeNumbers
,您将需要在graphql
调用的选项中重新获取查询。或者手动更新您的InMemoryCache
。
【讨论】:
谢谢@KyleRichardson。我仍然不确定如何将匹配的素数传递给updateCheckedNumber
。 checker()
函数告诉我是否可以找到与 recentCheckedNumber
匹配的素数。但是我如何获取那个素数并将其添加到checkedNumber.matchingPrime
?当我简单地将primeNumber
传递给updateCheckedNumber()
时,我得到一个未定义的错误。再次感谢您的帮助以上是关于将函数结果传递给 graphql 突变的主要内容,如果未能解决你的问题,请参考以下文章
使用 ApolloClient 将变量传递给 GraphQL 突变似乎不起作用
如何在 GraphQL 突变中使用 FaunaDB 将数组传递给字段
如何在反应js中将graphql列表传递给apollo中的突变