Все ваши всплывающие окна привязаны к одному и тому же элементу (this.state.anchorEl
) и все настроены на открытие на основе одного и того же логического значения (this.state.popped
). Это означает, что если у вас есть 2+ объекта на вашей временной шкале, вы визуализируете всплывающее окно для каждого объекта, и все всплывающие окна будут открываться или закрываться вместе, и все будут слева / справа от единственного элемента привязки (что бы это ни было).
Вероятно, вам следует создать новый компонент TimelineObject
, который визуализирует один объект временной шкалы и может иметь собственное локальное состояние и назначает собственный локальный anchorEl
для привязки его всплывающего окна. Возможно, его собственное состояние popped
. Тогда ваша функция карты будет больше похожа на:
timelineObjects.map((card, i) => <TimelineObject key={i} card={card} onLeft={i%2==0} />)
В качестве альтернативы, вместо использования this.state.popped
в качестве логического значения, используйте его в качестве картотеки для отображения всплывающего окна. И в вашем Popover
коде сделайте:
<Popover open={this.state.popped === i} ...
И когда вы установите popped
установите его как this.setState({popped: indexOfCardToShowPopover, anchorEl: elementOfCardToAnchorPopover });
Таким образом, одновременно открывается только 1 поповер.