gpt4 book ai didi

reactjs - react 自定义钩子(Hook)内的 Apollo GraphQL 查询

转载 作者:行者123 更新时间:2023-12-05 02:43:59 27 4
gpt4 key购买 nike

我正在尝试列出 Rick & Morty API 中的所有角色。我编写了以下 Hook 以在将要呈现结果的组件中使用。当我对值进行硬编码时,例如:(page: 1, filter: { name : "Rick"}) 查询运行得很好。如果我尝试使用变量,它会返回错误 400 错误请求(我'我假设这意味着我的 $page/$filter 值无效,我试图检查它们中的值 + 它们的类型一切似乎都很好)我查看了 Apollo | Queries - Client (React) 的文档并确保我使用正确的语法将变量注入(inject)查询。查询来自官方 Rick & Morty API 文档 API Docs .非常感谢任何指导/方向。

使用字符列表钩子(Hook)参数: page: Number |过滤器:字符串

import { useQuery, gql } from '@apollo/client';

const CHARECTERS_LIST = gql`
query ($page: Number!, $filter: String!){
characters
(page: $page , filter: { name : $filter}) {
info {
next
prev
}
results {
id
name
image
}
}
}
`;

export default function useCharecterList({page, filter}){
return useQuery(CHARECTERS_LIST, {
variables: {page, filter}
});
}

组件渲染结果:

import useCharecterList from '../hooks/useCharecterList'
import { Fragment } from 'react';
import InputComponent from './InputComponent';


function CharectersList() {
const { loading, error, data } = useCharecterList({page: 1, filter: "Rick"});
if (loading) return <p>Loading...</p>;
if (error) return <p>Error :(</p>;
const options = data.characters.results.map(({name}) =>{
return name;
})
return(
<Fragment>
<InputComponent options={options}></InputComponent>
{
data.characters.results.map(({ id, name, image }) => (
<div key={id}>
<img src={image} alt={`${name} from the popular sitcom Rick & Morty`}/>
<p>{name}</p>
</div>
))
}
</Fragment>
)


}

export default CharectersList

最佳答案

我想通了...就像一个白痴一样,我假设查询类型只是您的普通 JS 类型。经过一番挖掘后,我让它按如下方式工作。

import { useQuery, gql } from '@apollo/client';

const CHARECTERS_LIST = gql`
query CharectersList($page: Int!, $filter: FilterCharacter!){
characters
(page: $page, filter: $filter) {
info {
next
prev
}
results {
id
name
image
}
}
}
`;

export default function useCharecterList(options){
return useQuery(CHARECTERS_LIST, options);
}

import useCharecterList from '../hooks/useCharecterList'
import { Fragment } from 'react';
import InputComponent from './InputComponent';


function CharectersList() {
const { loading, error, data } = useCharecterList({variables: {page: 1, filter: { name: "Summer" }}});
if (loading) return <p>Loading...</p>;
if (error) {
console.log(error);
return <p>Error :(</p>}
const options = data.characters.results.map(({name}) =>{
return name;
})
return(
<Fragment>
<InputComponent options={options}></InputComponent>
{
data.characters.results.map(({ id, name, image }) => (
<div key={id}>
<img src={image} alt={`${name} from the popular sitcom Rick & Morty`}/>
<p>{name}</p>
</div>
))
}
</Fragment>
)


}

export default CharectersList

关于reactjs - react 自定义钩子(Hook)内的 Apollo GraphQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66661988/

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