【发布时间】:2021-06-28 03:56:02
【问题描述】:
我在使用 GraphQL 进行 React 路由时遇到了奇怪的情况。我在/users url 中有一个用户,当我第一次进入用户页面时,useQuery 正在工作,请求将发送到服务器并为我带来一些数据。然后,如果我转到另一个页面并返回用户页面,useQuery 不工作并且请求不会发送到服务器。 useQuery 正在工作,当我重新加载页面时请求将发送到服务器。这是我对用户组件的代码和查询:
Users.js
import React, { useState, useEffect } from "react";
import { useLazyQuery, useQuery } from '@apollo/client'
import { USERS} from './queries'
const [usersList, setUsersList] = useState([])
const { loading, error, data } = useQuery(USERS);
const Users= () => {
useEffect(() => {
const result = data?.users?.payload.filter(item => item.status === "waiting" && !item.isDeleted)
setUsersList(result)
}, [loading, data])
return (
<div>
{usersList?.map(user => (
<div key={user.key}>
<h1>{user.name}</h1>
<p>{user.status}</p>
</div>
))}
</div>
)
}
queries.js
import { gql } from '@apollo/client';
export const USERS= gql`
query{
users(size: 50){
payload{
key,
isDeleted,
status,
name,
...
}
}
}`
那么,最后一个问题,为什么 useQuery 在网站重新加载而不是重新渲染时只工作一次?
【问题讨论】:
标签: reactjs react-router graphql react-hooks apollo-client