javascript - 如何使用Apollo 查询 Prop 变化?

标签 javascript reactjs graphql apollo

目前我有一个 BooksList 组件,当单击标题时,我将 Prop 传递给我的 BooksDetails 组件。如何使用 Apollo Hook 仅查询 Prop 更改?

我不确定如何使用钩子(Hook)来做到这一点。我已经浏览了 Apollo 的 UseQuery 文档。我找不到有关 UseLazyQuery 的文档。

我尝试了以下方法,但它总是返回未定义:

const { loading, error, data } = useQuery(getBookQuery, {
    options: (props) => {
      return {
        variables: {
          id: props.bookId
        }
      }
    }
  })

书单:
const BookList = () => {
  const {loading, error, data} = useQuery(getBooksQuery)
  const [selectedId, setId] = useState('');


  return (
    <div id='main'>
      <ul id='book-list'>
        {data && data.books.map(book => (
          <li onClick={() => setId(book.id)} key={book.id}>{book.name}</li>
        )) }
      </ul>
      <BookDetails bookId={selectedId} />
    </div>
  );
};

export default BookList;

图书详情:
const BookDetails = (props) => {

  const { loading, error, data } = useQuery(getBookQuery, {
    options: (props) => {
      return {
        variables: {
          id: props.bookId
        }
      }
    }
  })

  console.log(data)
  return (
    <div id='book-details'>
      <p>Output Book Details here</p>
    </div>
  );
};

export default BookDetails;

编辑 - 我忘了补充说我的 GetBookQuery 有一个 ID 参数,所以一个例子是 getBookQuery(123) .

最佳答案

使用 useLazyQuery像这样:

  const [getBook, { loading, error, data }] = useLazyQuery(getBooksQuery);

完整示例:

import React from 'react';
import { useLazyQuery } from '@apollo/react-hooks';

const BookList = () => {
    const [getBook, { loading, error, data }] = useLazyQuery(getBooksQuery);

  return (
    <div id='main'>
      <ul id='book-list'>
        {data && data.books.map(book => (
          <li onClick={() => getBook({ variables: { id: book.id } })}} key={book.id}>{book.name}</li>
        )) }
      </ul>
      <BookDetails data={data} />
    </div>
  );
};

export default BookList;

示例和文档可以在 Apollo 的 GraphQL 文档中找到
https://www.apollographql.com/docs/react/data/queries/

关于javascript - 如何使用Apollo 查询 Prop 变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61878602/

相关文章:

javascript - admin-on-rest 如何实现自动刷新的自定义传奇

reactjs - React Material UI Grid 超大全屏

javascript - Apollo RESTDataSource 调用其他 RESTDataSource?

javascript - GraphQL 突变的响应应该是什么?

javascript - 如何防止钛合金 View 中的事件冒泡?

javascript - 如何从 html 中的 js 脚本引用变量

javascript - onclick Prop 不适用于 Material UI?

graphql - 使用 makeRemoteExecutableSchema 拼接安全订阅

javascript - 如何垂直居中模态?

javascript - 我将如何制作我的 Bootstrap 导航栏 "collapse"?