В моем приложении 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
. Тем не менее, когда я запускаю это, приложение вылетает.
Это правильный способ хранения локального состояния в Аполлоне, или я неправильно понял, как следует использовать локальное состояние Аполлона?