Дима, привет!
>> 1. Как в случае удчного добавления поста правильно учести посетителя в перечень постов или чего-нибудь ему написать?
2. Я так погнял, зто здесь тесты проходят, но не понял как. Можешь объяснить, что происходит в коде?
Это тебе надо получше освоить промисы (Promise). У тебя есть обработчик на успешное выполнение запроса. Убедись в ответе, что объект был получен (то есть создан). Далее уже решай что с этим делать. Для примера смотри создание технологий на текущем сайте. https://github.com/freecode-academy/freecode.academy/blob/83c82a066d10320733481fac06accc961c0b00d5/src/pages/Technologies/Create/index.tsx#L77-L87
mutation[0]({
variables: {
data,
},
})
.then(async (r) => {
if (r.data?.createTechnology) {
try {
await mutation[1].client.resetStore()
} catch (error) {
console.error(error)
}
router.push(`/technologies/${r.data.createTechnology.id}`)
}
})
.catch((error) => {
alert(error.message)
})
Здесь в блоке then проверяю полученную технологию if (r.data?.createTechnology) и если все ОК, то
1. Сбрасываю кеш аполло-клиента (API-клиента) (одновременно со сбросом кеша выполняется перезапрос всех активных GraphQL-запросов на странице).
2. Выполняю переход на страницу технологии.
const router = useRouter()
/**
* При успешном выполнении перекидываем на созданную страницу
*/
const onSave = useCallback(
(data: CreateTopicProcessorMutation) => {
const uri = data.response.data?.uri
if (uri) {
router.push(uri)
}
},
[router]
)
const [mutate] = useCreateTopicProcessorMutation({
onCompleted: onSave,
})
Здесь примерно все тоже самое делается (только что кеш забыл сбросить), но обработчик на сохранение передан параметром в сам хук мутации (параметр onCompleted). Смысл тот же, но структура кода так вроде как понятней.