Вместо писания кода, хочу несколько выкрутить на бинокле перспективу.
Вот есть Vue, реактивность, декомпозиция — всё замечательно. Но у меня есть ощущение, что разделив приложение на компоненты с изолированными данными, люди поняли, что хоть оно всё и красиво, но зашли, куда-то не туда, нужны глобальные переменные, без них жить плохо, поэтому и придумали Vuex. Не покидает ощущение, что Vue + Vuex это какие-то костыли, один исправляет другой. Типа концептуально правильные навороты, не просто, а мутациями... А общий смысл и цель потерялась при этом.
Ну вот честно, скажите, ваши замечательное разделённые компоненты, в которых используется Vuex, могут быть как-то переиспользованы вне данного приложения в каком-то ином проекте? Может быть лучше просто использовать Vue и обычные глобальные переменные без всяких там дополнительных фреймворков, хоть это будет смотреть и не модно?
Программирование — не моё профессиональное занятие, я им занимаюсь по необходимости для совершенно иной работы. И порой вижу переизбыток технологий. Порой там, где можно написать лендинг в нотепаде простым HTML минимального размера и без лестниц div-ов, один фреймворк на другом сидит и фреймворком погоняет.
где можно написать лендинг в нотепаде простым HTML минимального размера и без лестниц div-ов, один фреймворк на другом сидит и фреймворком погоняет
Действительно, один человек для себя может использовать любые примитивные инструменты. В коммерческой разработке это всё уже не масштабируемо и требуются фреймворки на фреймворках. Но пока вы сами в таком формате не поработаете, вы всё равно не поймёте. Сейчас вам тут будут объяснять, а вы будете спорить. В итоге все разойдутся, оставшись при своём, потому что по сути решают разные задачи.
Если лендинг написан на фрэймворках, типа реакте или вью, то тут конечно стоит скорее всего задать автору лендинга вопрос, "почему?"
Ну вот честно, скажите, ваши замечательное разделённые компоненты, в которых используется Vuex, могут быть как-то переиспользованы вне данного приложения в каком-то ином проекте?
Да, могут. И, скорее всего, Вы этого не понимаете, потому что не до конца освоили декомпозицию компонентов.
Есть "умные компоненты" и "глупые". Умные содержат логику и "подготавливают" данные. Умные компоненты могут не содержать собственной отрисовки вовсе, кроме отрисовки глупых компонентов, в которые прокидывают данные . А глупые компоненты, на староязыческом - вьюхи, просто эти данные отображают. И вот вьюхи то как раз и переиспользуют.
И если Вы говорите что на монолите будет "не костыль", то расскажите (на самом деле не надо) как же Вы на монолите реализуете, например, хранение данных о текущем пользователе, которые нужны на разных страницах? А ответ такой - точно так же через глобальный объект. Даже если каждая страница в Вашем монолите это отдельный компонент, эти данные нужны разным страницам.
Vuex во Vue это не просто глобальный объект, а глобавльный объект, избавляющий от необходимости самостоятельно реализовывать для него реактивность.
Vuex – светофор на перекрёстке. Вносит порядок ценой ограничений.
В деревне можно и без него. В большом городе – никак.
Мухи отдельно, котлеты отдельно. Тут данные, тут их отображение, а тут мы меняем данные.
Глобальную переменную откуда-то вдруг изменили, но никто не отреагировал.
Компоненты могут быть переиспользованы. Но помимо переиспользуемых компонентов, которые действительно не должны лезть ни в какой vuex, есть собственно и страницы самого приложения\сайта. Они никогда не будут переиспользованы, кроме как в том же самом приложении и у них должно быть общее состояние(не может не быть).