Статьи

Что такое Vuex? Руководство для начинающих по хранилищу данных приложений Vue

Vuex . Это произносится как «вевкс» или «вевекс»? Или, может быть, это означает «vew», произносится с молчаливым «x» во французском стиле?

Моя проблема с пониманием Vuex началась только с названия.

Будучи страстным разработчиком Vue, я достаточно много слышал о Vuex, чтобы подозревать, что он должен быть важной частью экосистемы Vue, даже если я не знал, что это на самом деле.

В конце концов, мне было достаточно удивления, поэтому я пошел к документации с планами краткого обзора; Достаточно, чтобы понять.

К моему огорчению, меня встретили незнакомые термины, такие как «модель государственного управления», «глобальный синглтон» и «источник правды». Эти термины могут иметь смысл для тех, кто уже знаком с этой концепцией, но для меня они совсем не склеиваются.

Однако я понял, что Vuex как-то связан с Flux и Redux . Я тоже не знал, что это было, но подумал, что это может помочь, если я сначала исследую их.

После небольшого исследования и настойчивости, понятия, стоящие за жаргоном, наконец начали материализоваться в моей голове. Я получил это. Я вернулся к документации Vuex, и она, наконец, поразила меня … Vuex чертовски крут!

Я до сих пор не совсем уверен, как это произнести, но Vuex стал неотъемлемой частью моего инструментария Vue.js. Я думаю, что это тоже стоит вашего времени, чтобы проверить это, поэтому я написал этот учебник по Vuex, чтобы дать вам представление, которое я хотел бы получить.


Вам также может понравиться:
Пример Vue: Создание приложения TODO с использованием Vue.js 2, Vuex и Codemix [Video] .

Понимание проблемы, которую решает Vuex

Понять Vuex намного проще, если вы сначала поймете проблему, для решения которой она предназначена.

Представьте, что вы разработали приложение для многопользовательского чата. Интерфейс имеет список пользователей, приватные окна чата, почтовый ящик с историей чата и панель уведомлений, чтобы информировать пользователей о непрочитанных сообщениях от других пользователей, которых они в данный момент не просматривают.

Миллионы пользователей ежедневно общаются с миллионами других пользователей через ваше приложение. Тем не менее, есть жалобы на неприятную проблему: панель уведомлений будет иногда давать ложные уведомления. Пользователь будет уведомлен о новом непрочитанном сообщении, но когда он проверяет, что это такое, это просто сообщение, которое он уже видел.

То, что я описал, это реальный сценарий, который разработчики Facebook имели со своей системой чата несколько лет назад. Процесс решения этой проблемы вдохновил их разработчиков на создание архитектуры приложений, которую они назвали «Flux». Flux составляет основу Vuex, Redux и других подобных библиотек.

Flux

Разработчики Facebook некоторое время боролись с ошибкой «уведомления зомби». В конце концов они поняли, что его постоянный характер был не просто ошибкой; это указало на некоторый основной недостаток в архитектуре приложения.

Недостаток легче всего понять абстрактно: если в приложении имеется несколько компонентов, которые совместно используют данные, сложность их взаимосвязей возрастет до такой степени, что состояние данных больше не будет предсказуемым или понятным. Следовательно, приложение становится невозможным для расширения или поддержки.

Идея Flux заключалась в создании набора руководящих принципов, которые описывают масштабируемую архитектуру веб-интерфейса, которая в достаточной степени устраняет этот недостаток. Не только для приложения чата, но и в любом сложном приложении пользовательского интерфейса с компонентами и общим состоянием данных.

Flux — это шаблон, а не библиотека.

Вы не можете перейти на GitHub и скачать Flux. Это шаблон дизайна, как MVC. Библиотеки, такие как Vuex и Redux, реализуют шаблон Flux так же, как другие структуры реализуют шаблон MVC.

Фактически, Vuex не реализует весь Flux, только подмножество. Не беспокойтесь об этом сейчас, давайте вместо этого сосредоточимся на понимании ключевых принципов, которые оно соблюдает.

Принцип № 1: Единый Источник Истины

Компоненты могут иметь локальные данные, о которых должны знать только они. Например, положение полосы прокрутки в компоненте списка пользователей, вероятно, не представляет интереса для других компонентов.

Но любые данные, которые должны совместно использоваться компонентами, то есть данные приложения, должны храниться в одном месте, отдельно от компонентов, которые их используют. Это единственное место называется «магазин». Компоненты должны считывать данные приложения из этого местоположения и не сохранять собственную копию, чтобы предотвратить конфликт или разногласие.


JavaScript