Если вы похожи на меня, вам нравится создавать простые веб-приложения и веб-сайты с помощью VueJS, и если вы раньше играли с Google Firebase, я уверен, что вы согласитесь:

- Vuex отлично подходит для управления вашими данными в приложении VueJS.
- Cloud Firestore - отличная база данных для Google Firebase.

Однако я обнаружил, что переписываю связь между Vuex ⇔ Firestore для каждого приложения, которое я создал. Вот тогда я подумал:

Что, если бы Vuex мог автоматически синхронизироваться с Firestore? Почему это не могло быть простой функцией или плагином, который можно было бы повторно использовать в любом проекте?

Вот почему я сделал Vuex Easy Firestore 🔥
→ Простое соединение firestore и vuex: двусторонняя синхронизация с нулевым шаблоном!

Какая проблема сейчас?

Давайте сразу же покажем несколько примеров кода, чтобы объяснить, что решает vuex-easy-firestore.

Допустим, у вас есть приложение Pokémon 😃 и такой модуль pokeDex:

const pokeDex = {
  state: {
    pokemon: {
     ‘001’: {name: ‘Bulbasaur’, seen: false, caught: false}
    }
  }
}
const store = {
  modules: { pokeDex }
}

Это была легкая часть - настроить простой модуль Vuex.
Проблема в том, что теперь вам нужно написать свою фактическую логику:

  • действия и мутации для добавления покемонов
  • то же самое для обновления значений
  • синхронизация каждый раз с Firestore
  • загрузка всех покемонов из Firestore, когда пользователь открывает приложение

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

Вы тратите много времени на инфраструктуру. НЕ создавать собственное приложение, а просто правильно синхронизировать.

Как это можно решить?

Что, если бы я сказал вам, что вы получаете все эти функции для добавления / обновления данных и автоматической синхронизации всего с Firestore!

Это vuex-easy-firestore

Я создал его с простой целью: минимальные настройки для автоматической двусторонней синхронизации

В соответствии с приведенным ниже примером просто добавьте 4 строки с информацией о том, как подключить Vuex к Firestore:

const pokeDex = {
  firestorePath: ‘users/{userId}/pokeDex’,
  firestoreRefType: ‘collection’,
  moduleName: ‘pokeDex’,
  statePropName: ‘pokemon’,
  // your state
  state: {
    pokemon: {
      ‘001’: {name: ‘Bulbasaur’, seen: false, caught: false}
    }
  }
}

Этого достаточно для полной автосинхронизации! Vuex-easy-firestore загрузит ваши данные с сервера по адресу firestorePath и добавит их в модуль vuex в store [moduleName] [statePropName ] `.

У вас также будут автоматически сгенерированные действия для добавления / редактирования / удаления данных!

Давайте добавим покемона:

const newPokemon = {name: ‘Squirtle’}
dispatch(‘pokeDex/insert’, newPokemon)

Vuex-easy-firestore автоматически (1) прикрепит идентификатор (2) добавит элемент в состояние через синхронизацию mutation (3) с Firestore.

Помимо `insert` вы также можете использовать:

・ `patch` для редактирования данных. Просто передайте также `id`.
・ `set` будет либо редактировать, либо добавлять, он проверяет, существует ли элемент или нет.
・ `delete` и передайте только `id`.

И, конечно же, другие модули можно так же легко синхронизировать с другими путями Firestore!

Подожди, а что во всем этом такого хорошего?

Вот несколько функций, над которыми я много работал и надеюсь, они будут полезны:

  • Двусторонняя синхронизация, которая автоматически добавляет ваши документы с сервера в модуль Vuex и синхронизирует изменения обратно.
  • Неважно, сколько вы `patch` или `insert`, vuex-easy-firestore автоматически создает пакеты для оптимизации количества вызовов API.
  • Настройте хуки до / после редактирования
  • Фильтры, определяющие, какие документы загружаются при открытии страницы.
  • Действие для получения и добавления других / дополнительных документов с тем же путем (с другими фильтрами)
  • Автоматические поля created_at, updated_at, created_by, updated_by
  • Установите fillables / guard, чтобы предотвратить синхронизацию определенных свойств.

И многое другое…

Чего же ты ждешь? Попробуйте и дайте мне знать, что вы думаете !! См. полную документацию здесь.

Еще кое-что…

Наконец, позвольте мне поделиться еще одной функцией, это одна из моих любимых. 😊

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

С помощью vuex-easy-firestore вы можете установить значения по умолчанию, которые добавляются к документам при вставке, а также после получения с сервера.

defaultValues: {
  newProp: ‘’
}

Определение этих defaultValues ​​ в конфигурации vuex-easy-firestore добавит свойство newProp в каждый документ, полученный с сервера. Таким образом, у вас нет проблем с реактивностью Vuejs, где ожидаемое значение отсутствует.

Три аплодисментов за значения по умолчанию! 👏 🙌 👏

Спасибо, что оставались со мной до конца! Дайте мне знать, что вы думаете об этом. Я надеюсь, что с его помощью я смогу облегчить жизнь хотя бы нескольким людям.

Github ⭐️
Документация 📃
・ Мой Twitter: @mesqueeb

Я также открыт для любых предложений и пожеланий! Откройте вопрос на Github или напишите мне в Твиттере. 👍

Фотография Йоханнеса Гролла на Unsplash