А что можно сказать про гель GC Tooth Mousse? Эффективен ли он для профилактики кариеса? И можно ли его сочетать с пробиотиком BLIS M18 для полной надёжности?
В целом, я хотел пояснить, почему в самом Vuex есть такое разделение, и вам пришлось написать библиотеку. Вы молодец, что выработали для себя подход и поделились своим решением. Мнение о том, что из компонентов надо вызывать только действия, популярная (вот, например, обсуждение в github vuex). Кстати, вроде порой всплывают разговоры, чтобы объединить мутации и действия, но мне кажется не так просто подружить синхронный и асинхронный подход.
Но хочу кстати сказать, такая вариативность подходов во Vue позволяет гибко подстраивать фреймворк под нужды проектов.
Например, у меня была задача сохранять параметры приложения в url. Классически, это решается через vue-router, проброс url-параметров в props-компонента, смена параметров через $router.push, watch-ере на $route и так по кругу.
В моём случае мне не хотелось переносить хранение части данных вне стора, хотелось сохранить state как единственный источник правды. И не хотелось менять существующий код работы с хранилищем. Поэтому я сделал зеркалирование некоторых параметров state в url при их изменении. Самое интересное, во vuex даже был подходящий метод (watch), позволяющий такое сделать. И это действительно классно, что vue позволяет гибко расширять функционал.
dispatch всегда вернёт промис, хотя, конечно, никакого серьёзной нагрузки это не несёт.
Я просто сталкивался с кодом, в котором много вызовов dispatch сделаны в синхронном стиле. И проблема в том, что были места, где такое использование по недосмотру приводило к ошибкам.
Просто часто для программиста вся разница между вызовом действия и мутации — просто вместо mapActions написать mapMutations. Собственно, ваша библиотека и убирает эту грань, но мне обычно хочется чётко понимать, что тут dispath делает асинхронное обращение к API, а тут commit сразу меняет state. Хочу контролировать всю «асинхронщину» в коде, т.к. ошибки такого рода сходу не видны.
На мой взгляд, использования экшенов вместо мутаций является небольшим антипатерном. Потому что экшн всегда возвращает промис. Даже если использовать их для синхронных изменений, получаем небольшой оверхед на ровном месте. Так же, есть потенциальная опасность при рефакторинге экшена сделать его асинхронным, забыв в месте вызова добавить ожидания выполнения и получить race condition в коде. А если ввести за правило, что экшены всегда для асинхронного кода, то dispatch без await будет не допустим.
Да, я знаю, что эта давняя тема, такая же, как использование констант для имён мутаций. В целом, считают, принятие того или иного подхода должно отталкиваться от реалий проекта: размер команды, объём кода, требования к скорости разработки.
Если я правильно понял задачу, то делал что-то подобное на днях. Пример. Компонент окна брал из element-ui. В вашей реализации смущает использование $router.go(-1). Получается, если открыть модальное окно по прямой ссылке, то при его закрытии не поменяется url.
Сам не читал ещё, но часто советуют (например, тут https://github.com/Tinkoff/career/blob/main/interview.md#книги-2) "Высоконагруженные приложения. Программирование, масштабирование, поддержка" Клеппман М.
Но хочу кстати сказать, такая вариативность подходов во Vue позволяет гибко подстраивать фреймворк под нужды проектов.
Например, у меня была задача сохранять параметры приложения в url. Классически, это решается через vue-router, проброс url-параметров в props-компонента, смена параметров через $router.push, watch-ере на $route и так по кругу.
В моём случае мне не хотелось переносить хранение части данных вне стора, хотелось сохранить state как единственный источник правды. И не хотелось менять существующий код работы с хранилищем. Поэтому я сделал зеркалирование некоторых параметров state в url при их изменении. Самое интересное, во vuex даже был подходящий метод (watch), позволяющий такое сделать. И это действительно классно, что vue позволяет гибко расширять функционал.
Я просто сталкивался с кодом, в котором много вызовов dispatch сделаны в синхронном стиле. И проблема в том, что были места, где такое использование по недосмотру приводило к ошибкам.
Просто часто для программиста вся разница между вызовом действия и мутации — просто вместо mapActions написать mapMutations. Собственно, ваша библиотека и убирает эту грань, но мне обычно хочется чётко понимать, что тут dispath делает асинхронное обращение к API, а тут commit сразу меняет state. Хочу контролировать всю «асинхронщину» в коде, т.к. ошибки такого рода сходу не видны.
Да, я знаю, что эта давняя тема, такая же, как использование констант для имён мутаций. В целом, считают, принятие того или иного подхода должно отталкиваться от реалий проекта: размер команды, объём кода, требования к скорости разработки.
За хэш виртуального предыдущего блока взято «0».