При использовании `реагировать-apollo`, чтобы связать компонент с запросом, я должен использовать компонент` <Query>`или функцию` graphql () `? - PullRequest
0 голосов
/ 02 мая 2018

Меня смущает лучшая практика при создании нового приложения react-apollo и попытке связать мои компоненты с запросом graphql.

Например, мне кажется, что в документации react-apollo есть места, где предлагается использовать <Query>:

const GET_ALL_DOGS = gql`
  query {
    dogs {
      id
      breed
      displayImage
    }
  }
`;

const Feed = () => (
  <Query query={GET_DOGS}>
    {({ loading, error, data }) => {
      if (error) return <Error />
      if (loading || !data) return <Fetching />;

      return <DogList dogs={data.dogs} />
    }}
  </Query>
)

Там, где другие места в документации предлагают использовать функцию graphql():

function TodoApp({ data: { todos } }) {
  return (
    <ul>
      {todos.map(({ id, text }) => (
        <li key={id}>{text}</li>
      ))}
    </ul>
  );
}

export default graphql(gql`
  query TodoAppQuery {
    todos {
      id
      text
    }
  }
`)(TodoApp);

Глядя на примеры и документы, кажется, что <Query> представляет подмножество graphql(), и в этом случае кажется, что вам лучше использовать graphql() по всем направлениям, но я подумал, что слышал, что использование <Query> было предпочтительным подходом, и, как представляется, его чаще используют в руководстве по документации react-apollo.

Любая помощь для новичка будет принята с благодарностью. Спасибо!

Ответы [ 3 ]

0 голосов
/ 02 мая 2018

Для небольших и простых случаев не стесняйтесь использовать оба. Там нет большого преимущества ни для одного из них. Но я использовал как в больших, так и в сложных случаях, и я могу вам сказать, что простота компонентов Query и Mutation сэкономит вам столько времени и головной боли в пути.

Еще одним недостатком graphql() является то, что он с большей вероятностью заставит вас создать родительский компонент для компонента запроса, который будет заботиться о ваших переменных (в большинстве случаев).

Кроме того, я лично больше имею дело с подпорками и элементами, чем определяю все в фигурных скобках и занимаюсь вложенными объектами и отступами. Когда параметры и переменные в graphql () растут, это может легко выйти из-под контроля :)

0 голосов
/ 06 мая 2018

TL; DR. Знайте причины, лежащие в основе рендеринга реквизита и компонентов более высокого порядка, затем выберите то, что лучше всего подходит для вас.

Вместо того, чтобы дать вам свое мнение о том, как его использовать, я думаю, что для вас и вашего дальнейшего обучения было бы лучше указать, что это две реализации, использующие два очень важных паттерна React: Render Props (или Function-as-Child) -Компоненты) и компоненты высшего порядка (HOC). Аполлон позволяет вам выбрать тот, который лучше всего подходит для вас. Вы должны знать их обоих, потому что вы столкнетесь с обоими во многих местах.

Первый пример - реализация Render Props. Это новое для Аполлона. Второй пример - реализация HOC.

У Apollo есть отличный пост в блоге, объясняющий, почему они реализовали Render Props для Apollo Client на Medium. Смотри https://blog.graph.cool/tutorial-render-props-in-react-apollo-2-1-199e9e2bd01e.

Google больше. Продолжаются дебаты о том, что лучше.

0 голосов
/ 02 мая 2018

React-apollo 2.1 выпустил новый компонент Query and Mutation. По моему мнению, это было огромное улучшение от команды Apollo, которая создала великолепную экосистему GraphQL в модуле реагировать-apollo. Для лучшей практики я думаю, что вы должны использовать компонент Query, потому что теперь все разработчики внешнего интерфейса, которые использовали клиент GraphQL, используют компонент Query и Mutation, но это возможность узнать, как использовать graphql (). Какая-то странная путаница в первый раз при использовании graphql () в мутации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...