У меня есть код, в котором я импортирую (инструкция es6 import) d3-selection и d3-transition. Однако мне также нужно захватить событие. Когда я не импортирую d3-переход, d3.events работает отлично. Как только я импортирую d3-transition, я получаю сообщение об ошибке, в котором говорится, что d3.event - это null и не может ссылаться на свойства события.
Есть примечание в Справочнике по API D3.
https://github.com/d3/d3-selection/blob/master/README.md#event: Если вы используете Babel, Webpack или другой сборщик ES6-to-ES5, имейте в виду, что значение d3.event изменяется во время события! Импорт d3.event должен быть живой привязкой, поэтому вам может потребоваться настроить сборщик для импорта из модулей ES6 D3, а не из сгенерированного пакета UMD; не все сборщики соблюдают jsnext: main. Также остерегайтесь конфликтов с глобальным window.event.
Я использую babel (для поддержки ie11) и webpack для сборки. Что означает эта записка? Почему не работает что-то вроде import {event as d3event} from'd3-selection';, за которым следует let d3 = Object.assign({}, d3selection, d3transition, d3event};?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


import {event as d3event} from'd3-selection'
d3event === null // true; `event`'s value changes later with user input.
let d3 = Object.assign({}, d3selection, d3transition, d3event)
// won't have an `event` property since Object.assign({}, null) -> {}
Добавление d3.event = event // or d3 = {event} по-прежнему будет возвращать нулевое событие, наблюдаемое во время назначения; см. Метод Майка Бостока для получения текущего события для решения.
Заметка о d3.event теперь содержит ссылка для объяснения того, что такое живое связывание: ссылка на переменную в d3-selection.
Дополнительное предостережение, которое стоило мне некоторого времени: если d3-drag указывает на другую версию d3-select, чем другие ваши инструменты, d3.select(/**/).call(d3.drag(/**/)) не будет работать, поскольку события никогда не достигают переменной event, которую использует d3.drag. Где-то в районе d3@^5 основной пакет больше не связывает версию d3-selection, что допускает такого рода несоответствия.