【发布时间】:2019-10-14 23:09:41
【问题描述】:
const ADD_TODO = gql`
mutation AddTodo($type: String!) {
addTodo(type: $type) {
name
}
}
`;
const ADD_AUTHOR = gql`
mutation AddAuthor($type: String!) {
addAuthor(type: $type) {
name
}
}
`;
我有上述两个突变来在我的数据库中添加数据。我正在捕获 bookval 和 authorval 变量中的突变所需的名称字段。这些变量分别传递给 AddBook 和 AddAuthor 函数
AddBook(bookval) {
const [addBook, { data }] = useMutation(ADD_BOOK);
addBook({ variables: { type: bookval } });
};
AddAuthor(authorval) {
const [addAuthor, { data }] = useMutation(ADD_AUTHOR);
addAuthor({ variables: { type: authorval } });
};
这是我在表单提交上调用的函数。但是我得到了 Hooks 只能在函数组件内部调用的错误
<form>
<p>Book Name</p>
<input
type='text'
ref={ (value) => this.book = value}
placeholder="enter book's name"/>
<br/>
<p>Author Name</p>
<input
type='text'
ref={ (value) => this.author = value}
placeholder="enter author's name"/>
<br/>
<br/>
<button onClick={this.getValues.bind(this)}>Donate</button>
</form>
这是我的表格
【问题讨论】:
-
从外观上我可以看到你正在使用`this.author`所以你的组件是
class component,你只能在functional component中使用钩子,你能分享更多你的代码吗?正在打电话给AddAuthor和AddBook,也许我们可以帮忙。 -
要不要直接转成函数组件?
-
可以尝试为您的类组件使用突变组件:apollographql.com/docs/react/v2.5/essentials/mutations/…
-
是的,这取决于要求,两者都可以工作。如果可能,转换为功能组件。如果不可能使用
mutation component -
变异组件是否也适用于两个输入字段? (我只需要在突变组件中添加另一个输入字段吗?)
标签: reactjs graphql react-apollo apollo-client