Хранить одно свойство из запроса GraphQL в локальном магазине Apollo - PullRequest
0 голосов
/ 14 марта 2019

В моем приложении React, когда пользователь переходит на myapp.com/org/companyname, он загружает страницу со следующей логикой, чтобы получить некоторые основные сведения о компании на основе названия компании в URL:

const FIND_COMPANY = gql`
  query CompanyQuery($companyName: String!) {
    company(name: $companyName) {
      ... on Company {
        name
        description
      }
      ... on Error {
        errorMessage
      }
    }
  }
`;

<Query
  query={FIND_COMPANY}
  variables={{
    companyName: this.props.location.pathname.split("org/")[1]
  }}
>
  {({ data }) => {
    if (data.company.errorMessage)
      return <div>{data.company.errorMessage}</div>;

    return (
     <div>
       <h1>{data.company.name}</h1>
       <p>{data.company.description}</p>
     </div>
    );
  }}
</Query>

Это прекрасно работает, однако я хочу сохранить только текущее название компании в локальном состоянии Apollo, чтобы другие компоненты могли легко получить к нему доступ без необходимости манипулировать строками в URL-адресе каждого компонента.

Для этого я следовал разделу 'Прямая запись' локальных документов Apollo и получил следующее:

<ApolloConsumer>
  {client => (
    <Query
      query={FIND_COMPANY}
      variables={{
        companyName: this.props.location.pathname.split("org/")[1]
      }}
      onCompleted={data =>
        client.writeData({ data: { companyName: data.company.name } })
      }
    >
      {({ data }) => {
        if (data.company.errorMessage)
          return <div>{data.company.errorMessage}</div>;

        return (
        <div>
          <h1>{data.company.name}</h1>
          <p>{data.company.description}</p>
        </div>
        );
      }}
    </Query>
  }
</ApolloConsumer>

Где я пишу только название компании в местный штат Аполлон onCompleted. Тем не менее, когда я запускаю это, приложение вылетает.

Это правильный способ хранения локального состояния в Аполлоне, или я неправильно понял, как следует использовать локальное состояние Аполлона?

...