gpt4 book ai didi

reactjs - 如何使用 React-Hooks 和 Apollo Client 在 React-GraphQL 中实现搜索功能?

转载 作者:行者123 更新时间:2023-12-05 00:47:41 30 4
gpt4 key购买 nike

我尝试使用 React-Hooks 和 GraphQL-Apollo 客户端在我的管理系统中实现搜索功能。虽然界面显示成功,但当我按下“搜索”按钮时,出现一个错误,名为:

Invalid hook call. Hooks can only be called inside of the body of a function component.

我很确定 useQuery 是在函数内部调用的,所以我不明白是什么原因造成的。显示所有用户和添加新用户等其他功能正常。

我已经尝试了几种方法来实现搜索功能并在线搜索,但仍然无法解决。这也是我第一次遇到 React-Hooks。

这是我当前在 searchUser 组件中的代码

import React from 'react'
import {useQuery} from 'react-apollo-hooks';
import {searchUserQ} from '../queries/queries';

const SearchUserForm = () => {
let name = '';
let content;

return (
<div id="edit-user">
<div className="field">
<label htmlFor="name">Search UserName</label>
<input type="text" id="name" onChange={ (event) => {
name = event.target.value }}/>
<button onClick={(event) => {
event.preventDefault();
const { data, loading, error } = useQuery(searchUserQ, {
variables: { name: name },
suspend: false
});

if (loading) {
content = <p>Loading User...</p>
}

if (error){
console.log(`Error Occur: ${ error }`);
content = <p>Error Occur!</p>
}

content = data.users.map(user => (
<p key={user.id}>Username: {user.name} ID: {user.id}</p>
));
}}>
Submit
</button>
<p>{ content }</p>
</div>
</div>
)
}

export default SearchUserForm;

有人可以帮忙吗?

还有一个问题是,我的 data 似乎每次执行查询时都会返回 undefined。我的查询有问题吗?以下是查询:

const searchUserQ = gql`
query User($name: String!){
user(name: $name){
id
name
email
}
}
`;

感谢并感谢您的帮助!

最佳答案

根据Rules of Hooks :

Don’t call Hooks from regular JavaScript functions. Instead, you can:

✅ Call Hooks from React function components.

✅ Call Hooks from custom Hooks (we’ll learn about them on the next page).

如果您需要手动调用查询来响应事件,请直接使用 Apollo 客户端。您可以使用 useApolloClient 在组件中获取客户端实例:

const SearchUserForm = () => {
const client = useApolloClient();
...
return (
...
<button onClick={async (event) => {
try {
const { data } = client.query({
query: searchUserQ,
variables: { name: event.target.value },
});
// Do something with data, like set state
catch (e) {
// Handle errors
}
}} />

你仍然可以使用useQuery,像这样:

const SearchUserForm = () => {
const [name, setName] = useState('')
const { data, loading, error } = useQuery(searchUserQ, {
variables: { name },
});
...
return (
...
<button onClick={async (event) => {
setName(event.target.value)
...
}} />

关于reactjs - 如何使用 React-Hooks 和 Apollo Client 在 React-GraphQL 中实现搜索功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55890604/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com