【发布时间】:2021-05-11 09:05:38
【问题描述】:
正如我们所知,当它的 props 或 state 发生变化时,react 组件会重新渲染。
现在我正在使用来自react-apollo 包的useQuery,如下所示:
import { gql, useQuery } from '@apollo/client';
const getBookQuery = gql`
{
books {
name
}
}
`;
function BookList() {
const { loading, error, data} = useQuery(getBookQuery);
if(loading) return <p>Loading....</p>
if(error) return <p>Ops! Something went wrong</p>
return (
<>
<ul>
{data.books.map(book => (
<li key={book.name}>{book.name}</li>
))}
</ul>
</>
)
}
export default BookList;
当我运行上面的代码时,我们首先在 DOM 中获得Loading...,然后更新为包含查询数据的列表(一旦到达)。但是一旦从查询中接收到数据,react 如何知道重新渲染我的组件。
这些data、loading 和error 属性是否映射到组件道具并且它们正在更新?如果是这样,为什么 chrome 开发工具不显示此 BookList 组件的任何道具?
有人能解释一下这个useQuery 自定义钩子在这里是如何工作的吗?
【问题讨论】:
-
文档是为了这些目的,对吧? apollographql.com/docs/react/data/queries
-
看不到道具,但可以看到道具下方的挂钩。顺便说一句,Apollo 有一个非常好的开发工具。你也可以使用它
标签: javascript reactjs react-hooks apollo react-apollo