Реагируйте ax ios после запроса и setState при смене реквизита - PullRequest
2 голосов
/ 13 февраля 2020

У меня есть приложение реагирования, и я использую geolocated для определения местоположения пользователей.

Следуя инструкциям по инициализации, я завернул компонент:

export default geolocated({
    positionOptions: {
        enableHighAccuracy: true,
    },
    userDecisionTimeout: 15000,
})(ShowPois);

Как только пользователь принимает (разрешает) поиск местоположения в браузере, я хочу, чтобы произошли две вещи.

Сначала мне нужно установить флаг, когда местоположение будет доступно приложению, поэтому у меня есть следующее:

static getDerivedStateFromProps(props, state) {
        if (!state.geolocatedReady && props.coords) {
            return {
                geolocatedReady: true
            }
        }
        return null;
    }

Обратите внимание, что props.coords происходит из геолокации

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

Итак, как я могу сделать запрос после публикации, а затем установить состояние при изменении реквизита в компоненте?

1 Ответ

1 голос
/ 13 февраля 2020

getDerivedStateFromProps только для крайних случаев . Случай, который у вас есть, звучит как подгонка для componentDidUpdate.

componentDidUpdate() {
  if(!this.state.geolocatedReady && this.props.coords) {
    this.setState({
      geolocatedReady: true,
    });
    this.getAddress(this.props.coords);
  }
}
getAddress = async (coords) => {
  const address = await mapApi.getAddress(coords);
  // or whatever you want with it.
  this.setState({
   address 
  })
}
...