Expo React Native watchPositionAsyn c срабатывает несколько раз - PullRequest
0 голосов
/ 17 июня 2020

Я использую watchPositionAsyn c, чтобы получить местоположение пользователя и обновить состояние, это работает нормально, но когда приложение находится в фоновом режиме и повторно открывается, оно срабатывает несколько раз, заставляя мой экран обновляться 1006 *, он также игнорировал 10-секундный интервал.

Есть ли способ исправить это? Кажется проблема на Android и iOS

  async componentDidMount() {
        this._getlocation();
     }


 _getlocation = async () => {

  const { status } = await Permissions.askAsync(Permissions.LOCATION)

  this.watchLocation = await Location.watchPositionAsync(
             {
                 distanceInterval: 15,
                 accuracy:6,
                 timeInterval: 10000
             },
             location => {
             let coords = location.coords;
             this.setState({userLocation: location})
             this.fetchItems();

           },
           error => console.log(error)
         );

  }

1 Ответ

0 голосов
/ 17 июня 2020

Попробуйте добавить "isRunning: false" в состояние компонента и попробуйте использовать следующую редакцию:

async componentDidMount() {
    if(this.state.isRunning === false) {  // <----- ADDED ------------------------
        this._getlocation();
    }
}

_getlocation = async () => {
    const { status } = await Permissions.askAsync(Permissions.LOCATION);
    this.setState({ isRunning: true });  // <----- ADDED ------------------------
    this.watchLocation = await Location.watchPositionAsync(
        {
            distanceInterval: 15,
            accuracy:6,
            timeInterval: 10000
        },
        location => {
            let coords = location.coords;
            this.setState({userLocation: location})
            this.fetchItems();
        },
        error => console.log(error)
    );
}
...