В ComponentDidMount вы должны получить данные для всех поездов, чтобы все маркеры могли быть установлены на своих позициях. Вы можете сделать это, используя один раз ('value') событие firebase. Это событие извлекает данные только из ссылки, когда она вызывается, поэтому вы будете вызывать ее, когда компонент монтировал.
ПРОЧИТАЙТЕ БОЛЬШЕ О РАЗ ('VALUE')
Теперь, когда у вас есть все указатели на своих позициях, пользователь может щелкнуть любой из указателей, чтобы отслеживать его движение вправо?
Таким образом, каждый указатель должен иметь что-то уникальное, например Train ID или что-то еще, я не знаю структуру вашей базы данных, поэтому я предполагаю, что у вас есть ID поезда. Теперь в функции маркера onPress вы должны передать этот TrainID.
пример:
onPress={()=> this.TrackSpecificTrain(trainID) }
Теперь в функции TrackSpecificTrain
вы должны вызывать защиту базы данных с идентификатором поезда и пожарной базой on ('value') Событие, теперь вы будете продолжать получать данные в реальном времени о выбранном поезде, и вы можете обновить ваше местное состояние stationData
с новыми данными, поступающими с firebase.
Пример
TrackSpecificTrain=(trainID)=>{
const ref = database().ref(`YourTrainsRef/${trainID}/`)
ref.on('value',( snapshot)=>{
//Update your local state with new data in snapshot
})
}
RemoveTracker=(trainID)=>{
const ref = database().ref(`YourTrainsRef/${trainID}/`)
ref.off("value")
}
Теперь здесь мы также используем RemoveTracker
, потому что вам может потребоваться прекратить отслеживание предыдущего поезда, если пользователь нажимает на другой маркер, чтобы он начал отслеживать идентификатор поезда на новом маркер и прекратить отслеживание предыдущего!.