что useState и useEffect способны полностью его заменить
Да, ты прав
Да, с абстракцией в виде юай либ тебе не нужно отслеживать низкоуровневые последствия их работы. Можешь идти дальше, если хочешь подумать, useEffect - следствие изменения состояния (упростим) компонента. Но это изменение происходит не в вакууме, а в следствии каких-то бизнес-сценариев. Кто-то в юай либах всё приложение пишет и получается кривое-косое нечто, но опустим. Соответственно, в идеале, тебе надо отслеживать не дом ноды, не значения в компоненте, а триггеры бизнес-логики. «Раскрыли список -> грузим данные по id выбранной штуки»
>Но это изменение происходит не в вакууме, а в следствии каких-то бизнес-сценариев. Кто-то в юай либах всё приложение пишет и получается кривое-косое нечто, но опустим. Вот тут вас не понял. А в чём недостаток подхода с использованием состояний компонент и отслеживанием их изменений через useEffect? >Соответственно, в идеале, тебе надо отслеживать не дом ноды, не значения в компоненте, а триггеры бизнес-логики. «Раскрыли список -> грузим данные по id выбранной штуки» Так ведь это делается вешанием событий на элементы?
Недостаток в том, что у эффекта есть зависимости и ты не контролируешь его выполнение на сложных сценариях без приседаний с рефами или чем-то еще. Эффект подходит для синхронизации явного списка зависимостей с внешним миром и обратно. Например - синк document.title или подписка на внешний стор (для этого есть другой апи, но не суть). Эффект не подходит (ну, подходит, но на уровне забивания гвоздей микроскопом) для корректного описания сценариев «когда случилось Х - сделать У с такими-то данными», слишком топорный и для другого
>Эффект не подходит (ну, подходит, но на уровне забивания гвоздей микроскопом) для корректного описания сценариев «когда случилось Х - сделать У с такими-то данными», слишком топорный и для другого Приведите пример, прошу! А то я никак не могу сам такой кейс что-то выдумать)
Триггеры: - сбросить заказ - оформить заказ продукта Когда: нажали на сброс или ушли со страницы Сделать: сбросить заказ Когда: (триггер) сбросить заказ Взять: ID продукта из заказа Если: ID продукта есть Сделать: удалить продукт из заказа Когда: (триггер) оформить заказ продукта Взять: ID продукта из триггера Сделать: перейти на страницу заказа Когда: нажали на продукт Сделать: (триггер) оформить заказ продукта и (триггер) сбросить заказ
Т.е. вы это предпочли бы сделать через MutationObserver, а не через взаимодействие с предыдущим стейтом?
За интуицию по написанию сценариев благодарю
Обсуждают сегодня