Я использую Redux + Firestore, чтобы получить данные и заполнить мой магазин. Я использую .onSnapshot
для прослушивания данных в данной коллекции. Что я не могу сделать, так это отсоединить слушателя, когда я закончу.
Я прочитал документы Firestore и понимаю, что для отключения слушателя вам нужно сохранить обратный вызов (.onSnapshot
) как переменную, а затем вызвать эту переменную для отсоединения.
Проблема, с которой я сталкиваюсь, заключается в том, что я использую Redux (и присоединяю / отсоединяю в componentDidMount/componentWillUnmount
соответственно).
Я видел используемый шаблон см. здесь (хотя и в Vue), где обратный вызов хранится в локальной переменной данных, поэтому я попытался отправить сам обратный вызов в хранилище Redux, но он не получил его.
Код ниже:
ПРИМЕЧАНИЕ. Я пытался добавить значения true / false bool в качестве параметров в getRoomActivity
для вызова unlisten()
на основе ссылки, указанной выше, на данный момент - I ' м в недоумении.
// group.js (redux action file)
export const getRoomActivity = (roomId) => (dispatch) => {
const unlisten = roomCollection
.where('room', '==', roomId)
.onSnapshot((querySnapshot) => {
const roomItems = [];
querySnapshot.forEach((doc) => {
roomItems.push(doc.data());
});
dispatch({ type: GET_ROOM_ACTIVITY, payload: roomItems });
});
};
//Room.js (component)
componentDidMount() {
this.props.getRoomActivity(this.props.roomId);
}
componentWillUnmount() {
this.props.getRoomActivity(this.props.roomId);
}