Правильный шаблон для использования <Query>в других методах класса - PullRequest
0 голосов
/ 11 ноября 2019

Я понимаю, что Apollo предпочитает использовать <Query> в наших методах рендеринга для выполнения запросов, а не this.props.client.query().

Каждый новый класс, который я создаю, я начинаю с компонента <Query> (чтобы оставаться лучшим-практика), но 100% процентов времени в итоге удаляют его и просто делают this.props.client.query() в моем componentWillMount, иначе в принципе любой другой метод класса бесполезен, так как он не может получить доступ к любым нужным ему данным.

Предполагается ли, что что-либо, полученное от компонента <Query>, может использоваться только в render()?

Полагается ли в значительной степени исключительно на this.props.client.query(), является ли анти-паттерн? Если да, то должен ли я создать еще один компонент для размещения внутри моего <Query>, чтобы такие вещи, как componentDidUpdate, не стали бесполезными?

Извинения за все вопросы, ям довольно удивлен я не видел задал этот вопрос раньше.

1 Ответ

0 голосов
/ 11 ноября 2019

Основная причина не для использования client.query является то, что он не соблюдает кэш изменений. Если информация обновляется в кеше (например, после мутации), данные, отображаемые в вашем компоненте, не будут обновляться, пока он не будет повторно смонтирован.

Если у вас есть компонент класса, и выс использованием компонента Query, и вам нужны предоставленные данные, доступные для методов за пределами render, тогда да, вам нужно иметь два компонента, чтобы данные могли передаваться в виде реквизита. Это фактически заставляет вас использовать шаблон контейнера / презентатора .

Или вы можете просто использовать graphql HOC для того же эффекта.

Однако ... какверсии 3.0, как компоненты рендер-проп и Специальную все Устаревшие . Так что в плане «наилучшей практики», вы, вероятно, хотите Migrate с помощью функциональных компонентов и крючки в любом случае.

...