redux - условие гонки bindActionCreators с помощью сервиса карт Google - PullRequest
0 голосов
/ 05 ноября 2018

Недавно я столкнулся с очень странной ошибкой в ​​каком-то устаревшем коде.

Основной причиной проблемы было то, что вызванный объект имел зависимость, которую он извлекал из window, когда свойство окна не существовало.

function geoActions = (options: { dependencies = {} } = {}) => {
  ...
  const placesService =
    dependencies.placesService ||
    new window.google.maps.places.PlacesService(
      document.getElementById('placesServiceResults'),
    );
  ...
}

Затем эта функция была вызвана, возвращая объект функций, и отображена для подключения.

const mapDispatchToProps = (dispatch) => ({
  geoActions: bindActionCreators(geoActions(), dispatch)
});
export connect(mapStateToProps, mapDispatchToProps)(Comp);

Итак, вот странная часть. Этот связанный код обслуживает два интерфейса: общедоступный интерфейс и интерфейс администратора. В интерфейсе администратора карты Google не запускаются. (Конечно, gmaps следует импортировать из пакета, а не из окна, но я не писал этот код.) Странно то, что он все еще работает. Однако если я удаляю bindActionCreators и передаю mapStateToProps как объект, geoActions ломается и не может разрешить карты Google.

Мой вопрос - почему? Я предположил, что это могло быть условие гонки, но это не имеет смысла, потому что независимо от того, карты Google не находятся в окне, где запускается связанный скрипт. bindActionCreators на самом деле не вызывает geoActions() до тех пор, пока не будет вызван props.geoActions()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...