Недавно я столкнулся с очень странной ошибкой в каком-то устаревшем коде.
Основной причиной проблемы было то, что вызванный объект имел зависимость, которую он извлекал из 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()