Парсинг на django+requests
простенький парсинг
React 19 — useOptimistic
useOptimistic — новый хук, который позволяет отобразить “оптимистичное” состояние. Оно называется “оптимистичным”, потому что мы “оптимистично” надеемся, что наш запрос не свалится с ошибкой и после выполнения запроса состояние будет выглядеть именно так.
❓Как используется
- В useOptimistic передаётся реальное состояние (cart) и функцию-reducer, для обновления оптимистичного состояния
- Компонент (Cart) использует “оптимистичное” состояние (optimisticCart) для рендера
- Перед выполнением запроса обновляется “оптимистичное” состояние
- Когда запрос завершился, нужно обновить реальное состояние
- Как только реальное состояние обновилось, оптимистичное состояние обновится автоматически, так как оно передано в useOptimistic первым параметром. ⚠️ Поэтому важно следить, чтобы приходило одно и то же состояние.
- Если запрос упал с ошибкой, нужно откатить изменения в оптимистичном состояниb.
ℹ️ Первый вопрос, которым я задался, а в чём отличие от обычного setState, путём экспериментов, вот что удалось найти:
- useOptimistic работает с формами. Работать с обычной кнопкой в Single Page Application мне не удалось, обновление происходило только после завершения запроса
- useOptimistic работает только внутри асинхронного обработчика, что логично. Если убрать async/await, обновление произойдёт только после завершения запроса
- Параметр в useState используется только для инициализации, и игнорируется в последующих рендерах. useOptimistic будет сихронизироваться со значением переданным первым параметром.
🤷♂️ Очень мало полезного удалось найти о useOptimistic. Во всех статьях и видео тривиальные примеры, нигде не рассказывается как обрабатывать более сложные ситуации:
- Как обновлять оптимистичное состояние, если запустить несколько запросов одновременно?
- Как использовать useOptimistic в SPA вне форм?
Поэтому пришлось создать пару ишью: раз и два. В любом случае, пока useOptimistic выглядит каким-то низкоуровневым API. Надеюсь скоро появится больше Best Practices по его применению. Если вам есть что добавить — пишите в комментах.
Ещё по теме:
- Frontend First — Ep 179 - React Deep Dive: useOptimistic
- Официальная документация по useOptimistic
- Код из примера тут
https://t.me/cherkashindev/184
Какой дизайн лучше?
Когда то я писал что-то вроде web-crm для кастингового агентства. Минимальный набор функционала. По сути просто покажи заявки/отсортируй их.
Недавно появилось свободное время и я решил переписать ее. Но я давно горел идеей написать собственную web-crm систему, к которой можно будет подключать другие компании или вовсе адаптировать весь исходный код под их нужды.
Так вот, решил что буду писать вместе с пикабу и периодически писать мини-отчеты о ходе дел. Ну а сейчас же я хочу просто показать промежуточный этап и узнать какой дизайн по вашему мнению лучше?
Старая версия сайта
В старой версии не было ничего особенного. Бесконченая лента с подгрузкой старых заявок и возможность отправить заявку в выполненные. Поиск
Новая версия в процессе разработки. Скрыл детали, чтобы не замазывать
В новой версии я посчитал важным сделать карточки намного меньше (чтобы их больше помещалось на одну страницу). Также партнеры попросили добавить возможность оставлять заметки\комментарии к заявкам (это и есть первопричина по которой я решил взяться за переделку приложения)
Основная идея такова:
Показать только самую важную информацию а всё остальное засунуть в саму карточку и показывать при клике.
p.s если у вас есть идеи, что можно добавить\улучшить как по дизайну, так и по функционалу - буду очень рад почитать
React 19 — use(Promise)
use — новый хук, который позволяет считывать данные из промиса и при этом интегрирован с Suspense и ErrorBoundary.
ℹ️ Основные моменты:
- На этот хук не распространяются правила хуков — его можно использовать внутри циклов и условных операторов.
- Если мы используем хук use(Promise), то где-то в родительском компоненте мы должны положить сам промис (не данные как мы делали раньше) в стейт (useState). Это позволяет избавиться от useEffect’а, который был нужен, чтобы запросить данные при первом рендере.
- Хук интегрирован с Suspense, поэтому пока промис не разрезолвится — будет показан fallback объявленный в ближайшем Suspense.
- Если промис зареджектился, то будет показан fallback объявленный в ближайшем ErrorBoundary
- Песочница тут
- Официальная документация тут