Николай, добавляю картинку к посту.
1. Изменил схему призмы
2. Дописал тип поля в нексусе
и... не понимаю, а что дальше делать. Можешь дать направляющий пинок?
Спасибо! Изучаю
Дима, привет!
>> первый код оказался более понятен.
Да, первый более понятен, потому что перед глазами полностью await then/catch. А вот второй получается чуть более запутанным, потому что не понятно что это вообще за onCompleted. Но на самом деле в случае с использованием аполло-клиент такой метод более правильный, потому что в рамках АПИ данной библиотеки. Смотри официальную документацию: https://www.apollographql.com/docs/react/data/mutations/#oncompleted
То есть в качестве параметра onCompleted передается функция-обработчик, которая будет вызвана в случае успешного АПИ-запроса. Плюс здесь в том числе и в том, что ты еще до вызовы непосредственно запроса прописываешь какую логику ты хочешь получить, когда запрос будет выполнен и будет выполнен успешно. Иногда такой подход более понятный с организационной точки зрения. Но, опять-таки, это кому как больше нравится и совсем не обязательно делать именно так. Но понимать такие приемы очень важно, потому что часто библиотеки пишутся так, что в них приходится передавать обработчики. Это, что называется, callback hell (Ад обратных вызовов). Есть вот даже отдельный сайт, посвященный этому явлению :)
Николай, привет!
Спасибо! С промисами более-менее разобрался: первый код оказался более понятен.
Дима, привет!
>> 1. Как в случае удчного добавления поста правильно учести посетителя в перечень постов или чего-нибудь ему написать?
2. Я так погнял, зто здесь тесты проходят, но не понял как. Можешь объяснить, что происходит в коде?
Это тебе надо получше освоить промисы (Promise). У тебя есть обработчик на успешное выполнение запроса. Убедись в ответе, что объект был получен (то есть создан). Далее уже решай что с этим делать. Для примера смотри создание технологий на текущем сайте. https://github.com/freecode-academy/freecode.academy/blob/83c82a066d10320733481fac06accc961c0b00d5/src/pages/Technologies/Create/index.tsx#L77-L87
Здесь в блоке then проверяю полученную технологию if (r.data?.createTechnology) и если все ОК, то
1. Сбрасываю кеш аполло-клиента (API-клиента) (одновременно со сбросом кеша выполняется перезапрос всех активных GraphQL-запросов на странице).
2. Выполняю переход на страницу технологии.
Здесь примерно все тоже самое делается (только что кеш забыл сбросить), но обработчик на сохранение передан параметром в сам хук мутации (параметр onCompleted). Смысл тот же, но структура кода так вроде как понятней.
Всем привет!
Сегодня хотел напомнить всем, что здесь можно не только просто проходить уроки, но и выполнять практические задачи и обсуждать их. Вот для примера, Дмитрий делает свой тестовый проект https://github.com/linklib/gribok-prisma и обращается со своими вопросами, например Мутации в @prisma-cms/nextjs-nexus. И плюс здесь не только в том, что мы можем обсудить какие-то теоритические аспекты, а еще и в том, что я могу видеть реальный код и могу его поправить (отправив пулл-реквест), и могу прокомментировать отдельные участки кода. Например вот только что выполнил код-ревью: https://github.com/linklib/gribok-prisma/pull/3#pullrequestreview-774002390
Так что, если вы хотите больше закреплять свои знания на практике, советую тоже заводить свои тестовые проекты и обсуждать ваши задачи и решения. Как запускать проекты локально, писал недавно здесь (если что-то не понятно будет с запуском, не стесняйтесь, спрашивайте).
Николай, привет!
Посмотри, пожалуйста, коммит: https://github.com/linklib/gribok-prisma/commit/6295a8f9af3e9a6eff46ec6796505275426c2884
Можно как-то лучше сделать?
И есть 2 вопроса, которые в которых нужна помощь:
1. Как в случае удчного добавления поста правильно учести посетителя в перечень постов или чего-нибудь ему написать?
2. Я так погнял, зто здесь тесты проходят, но не понял как. Можешь объяснить, что происходит в коде?
Спасибо!
Николай, привет!
Можешь одним глазком посмотреть - https://github.com/linklib/gribok-prisma/commit/e35b04bf38b2c9c23bdb78e4c4d034194e1df8a5
Вроде все работает, но на всякий случай.