我正在尝试将Apollo的一些信息写入GraphQL / MongoDB数据库中,但是突变总是存在错误。
也许有人可以帮助我:(?
我使用this.addTracker();调用具有所需参数的函数;在onComponentDidMount();
addTracker(trackerModelID, Hash, userId){
console.log("Typ: " + trackerModelID);
console.log("Access-Tooken: " + Hash.access_token)
var access_token = Hash.access_token
var token_type = Hash.token_type
var expires_in = Hash.expires_in
var user_id = Hash.user_id
const createTrackerMutation = gql`
mutation CreateTrackerMutation($trackerModelID: ID, $userId: ID,
$access_token: String, $token_type: String, $expires_in: Int, $user_id: String)
{ createTracker (
trackerModelID: $trackerModelID,
userId: $userId,
access_token: $access_token,
token_type: $token_type,
expires_in: $expires_in,
user_id: $user_id
)
{
id
}
}
`
console.log("jetzt run")
return(
<div>hi
<Mutation
mutation={createTrackerMutation}
variables={{ trackerModelID, userId, access_token, token_type, expires_in, user_id }}>
</Mutation>
</div>
)
}
错误消息:
警告:道具类型失败:道具children
在Mutation
中标记为必需,但其值为undefined
。
在突变中(在fitbit.js:97)
答案 0 :(得分:2)
错误来自Mutation
内部的propTypes定义。
错误显示Mutation
要求孩子作为道具,但没有children
传递给Mutation
您需要在此处插入子项:
<Mutation
mutation={createTrackerMutation}
variables={{ trackerModelID, userId, access_token, token_type, expires_in, user_id }}>
[INSERT_CHILDREN_HERE]
</Mutation>
根据Mutation
的期望,孩子可以是JSX元素,文本或其他内容。根据文档,Mutation
使用renderProp pattern
。因此,您应该向它传递一个返回一些JSX
的函数。 Here is a good example in the doc
答案 1 :(得分:2)
如错误所示,Mutation
组件期望传递一个children
道具,但您未提供该道具。 Query
和Mutation
组件都使用render props模式,这意味着您提供的children
实际上应该是一个返回该组件以进行渲染的函数。
<Mutation
mutation={createTrackerMutation}
variables={{ trackerModelID, userId, access_token, token_type, expires_in, user_id }}>
{(mutate, result) => {
return (
<div>Your component here.</div>
)
}}
</Mutation>
有关渲染prop函数的签名的详细信息,请参见here,但从广义上讲,它已将mutate
函数作为其第一个参数,然后将results
传递给了它。对象作为第二个参数。 mutate
函数就是您用来触发突变的函数。
不同于Query
组件,它将在挂载时运行传递给您的查询,而Mutation
组件将在调用mutate
之前不运行关联的GraphQL查询。这是有意的,因为大多数变异通常不需要进行某种用户操作就可以发生。
如果在安装组件时需要运行突变,则需要将Mutation
组件内部呈现的组件作为道具传递到mutate
中。然后,该组件可以在其mutate
方法中调用componentDidMount
。之前已经问过这个问题,并且可以找到更详细的答案here。