Состояние Vuex в синхронизации с Firebase - PullRequest
0 голосов
/ 02 мая 2018

Я следую некоторым рекомендациям, чтобы синхронизировать состояние Vue.js с Firebase. Я установил ссылки на Firebase и геттеры, мутации и действия в vue в отдельном хранилище папок. Кажется, это работает, когда я обновляю состояния без подключений Firebase (локальных), и это также работает, когда я обновляю Firebase из других компонентов, используя только Firebasereference и push - тогда синхронизация, кажется, работает. Мой вопрос заключается в том, стоит ли мне обновлять состояние throw «action / mutation», и мутация будет выдвигать массив состояний и каким-то волшебным образом обновлять Firebase, чего не происходит в моем случае.

Итак - как обновить? Из компонента, использующего ссылку, например, dbOrdersRef.push (order) или с помощью обращения к магазину, например, с использованием этого. $ Store.dispatch ('setOrder', order), который не обновляет Firebase (но обновляются другие локальные переменные) ).

1 Ответ

0 голосов
/ 02 мая 2018

Я думаю, что схема должна быть такой:

Вы должны как-то подписаться на обновления firebase (я не знаком с firebase, но я уверен, что для этого должен быть какой-то механизм), а когда обновления приходят из firebase - вы должны изменить свое хранилище, отправив некоторые действия, чтобы синхронизируйте магазин с Firebase.

В идеале ваше приложение должно работать только с вашим магазином. Магазин должен скрывать такие детали реализации, как использование Firebase. Если завтра вы переключитесь с firebase на что-то другое, вам не следует переписывать свои компоненты, которые работают с магазином. Они по-прежнему будут работать с магазином и с теми же действиями.

Когда вы обновляете что-то в своем магазине, вам также необходимо обновить Firebase. Я думаю, что вы можете сделать это правильно в своих действиях, это должно быть хорошо. Таким образом, вы можете быть уверены, что все изменения, которые появятся в вашем магазине, будут в firebase. Например. Вы звоните someAction, который на самом деле делает некоторые манипуляции с огненной базой. Если вы подписались на изменения в Firebase, вы даже не будете делать что-то еще в этом действии, кроме отправки некоторой команды для FireBase, потому что ваша подписка обновит ваш магазин. Или вы можете немедленно изменить хранилище (или оптимистическое обновление), затем дождаться ответа от firebase, а затем решить оставить это обновление или вызвать некоторую мутацию для отката (однако здесь вы должны быть очень осторожны из-за подписки на изменения в firebase).

Или, в качестве альтернативы, вы можете написать какой-нибудь плагин для вашего магазина, который будет отправлять обновления в firebase только после внесения каких-либо изменений в вашем магазине. В этом случае обновления из вашего приложения сначала будут появляться локально в вашем магазине, затем ваш плагин отправит их в firebase (возможно, такой плагин даже существует, idk).

Я не эксперт в firebase, но попытался поделиться некоторыми мыслями о том, как это должно работать в целом. Надеюсь, это поможет.

О, вернемся к вашему вопросу:

dbOrdersRef.push (заказ) или с вызовом магазина с, например, этим. $ Store.dispatch ('setOrder', заказ), который не обновляет Firebase

Я думаю, вам вообще не следует использовать firebase в компонентах, а вместо этого следует использовать свой магазин. Поэтому я бы лучше посоветовал использовать второй вариант. Но вы должны реализовать обновления Firebase по своему усмотрению, по умолчанию нет никаких магических обновлений из магазина в Firebase (по крайней мере, если вы не используете какой-либо плагин с этой магией).

...