У меня есть компонент, который я хотел бы получить данные для профиля и разрешить публиковать сообщения в том же представлении.Здесь я создал простой компонент профиля, и в запросе была установлена мутация, похожая на учебник Apollo React .
Когда я запускаю это, я получаю правильно обработанный запрос с данными.При нажатии кнопки происходит мутация, но страница перерисовывается с пустым объектом в параметре Query
s data
и ошибками страницы с Cannot read property 'name' of undefined
(что ожидается при пустом объекте data
).
Есть ли лучший подход здесь?
const GET_PROFILE = gql`
query GetProfileQuery($profileId: ID!) {
getProfileInfo(profileId: $profileId) {
name
}
}
`;
const ADD_ENDORSEMENT = gql`
mutation AddEndorsement($profileId: ID!, $body: String!) {
addEndorsement(profileId: $profileId, body: $body) {
endorsementId
}
}
`;
const Profile = props => {
const profileId = props.match.params.profileId;
return (
<Query query={GET_PROFILE} variables={{ profileId: profileId }}>
{({ loading, error, data }) => {
if (loading) return <p>Loading...</p>;
if (error) return <p>Error :(</p>;
return (
<Fragment>
<h1>Welcome {data.getProfileInfo.name}</h1>
<Mutation mutation={ADD_ENDORSEMENT}>
{(addEndorsement, { loading, error }) => (
<div>
<button
onClick={e => {
addEndorsement({
variables: {
profileId: profileId,
body: "This is a test."
}
});
}}
>
Save
</button>
{loading && <p>Loading...</p>}
{error && <p>Error :(</p>}
</div>
)}
</Mutation>
</Fragment>
);
}}
</Query>
);
};