ApolloConsumer VS импортный клиент - PullRequest
1 голос
/ 25 октября 2019

Почему я должен использовать ApolloConsumer вместо прямого импорта клиента в моем модуле?

Из документа я должен сделать что-то вроде:

// Module A.js initiate client
const client = new ApolloClient({
  // init cache, links, typeDefs...
});
export default client;
// Module index.jsx
import client from 'A';

ReactDOM.render(
  <ApolloProvider client={client}>
    <App />
  </ApolloProvider>, 
  document.getElementById('root'));
// Any other component not using Query or Mutation
const Other = () => (
  <ApolloConsumer>
  {
    client => {
      // use client
    }
  }
  </ApolloConsumer>);

Но почемуне просто импортировать клиент без ApolloConsumer?

// Module OtherBis
import client from 'A';

const AltOther () => {
  // do something with client
  return <div></div>;
};

Ответы [ 2 ]

0 голосов
/ 25 октября 2019

Возможно, по тем же причинам, по которым вы не должны импортировать store напрямую:

Аналогично, хотя вы можете ссылаться на экземпляр вашего магазина, импортируя его напрямую, это не рекомендуемый шаблон в Redux,Если вы создадите экземпляр магазина и экспортируете его из модуля, он станет единичным. Это означает, что будет сложнее изолировать приложение Redux как компонент более крупного приложения, если это необходимо, или включить рендеринг сервера, потому что на сервере вы хотите создавать отдельные экземпляры хранилища для каждого запроса.

0 голосов
/ 25 октября 2019

На мой взгляд, компонент ApolloConsumer создан для поддержки JSX, как и react-relay для relay. Это не обязательно. На самом деле я никогда не использовал ApolloConsumer. Кроме того, есть крючки (например, useQuery, useMutation, useSubscription), которые могут делать все. Они просто делают инструмент. Использовать его или нет, решать только вам.

...