После отправил этот ответ, и испытав и работал немного с этой работой, вокруг, я понимаю, что это не является оптимальным.
Выпадающее меню Bootstrap закрывается, как только пользователь взаимодействует с ним. Это может быть не желаемое поведение (в моем случае, я вставляю datepicker, и пользователь не может изменить месяц без необходимости повторного открытия меню, чтобы выбрать новую дату).
У меня была такая же проблема, и я придумал легкое и альтернативное решение.
Я не хотел использовать реакцию-бутстрап (другие части моего приложения не подвергаются реактированию и не используют бутстрап, поэтому я не хочу, чтобы две библиотеки делали то же самое).
Выпадающий компонент, предоставленный из коробки Bootstrap, почти обеспечивает те же функциональные возможности, что и popover, за исключением того, что он более гибкий. Это стандартный Bootstrap выпадающий:
<div class="dropdown">
<button id="dLabel" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Dropdown trigger
<span class="caret"></span>
</button>
<ul class="dropdown-menu" aria-labelledby="dLabel">
...
</ul>
</div>
Вот минимум, вы должны заставить его работать, не нарушая его, и вы можете включать в зависимости от того, React элемент в нем:
<div className="dropdown">
<button data-toggle="dropdown">
Dropdown trigger
</button>
<div className="dropdown-menu">
<myGreatReactIntervactiveComponent
value={this.props.value}
onChange={this.handleChange}
onClick={this.handleClick}
children={this.greatChildrenForMyGreatREactInteractiveComponent}
/>
</div>
</div>
Все, что вам нужно держать (i) класс «выпадающий список» на обертке div, (ii) атрибут «перетаскивание» данных в триггер (вы можете изменить триггер на любой элемент html, который вы хотите), и (iii) класс «выпадающий список», меню "в раскрывающемся списке (вы также можете изменить его на любой элемент html, который вы хотите, и вам не нужно вставлять элемент« ul », предложенный Bootstrap).
Вы потеряете несколько функций по сравнению с popover (вы не можете определить свои собственные переходы, вы не можете отображать их сверху, влево или вправо, но только ниже - это выпадающий список), но вы получаете полный контроль над содержимое вашего раскрывающегося списка/popover.
В вашем первом примере для рендеринга статического popover 'React.renderComponentToString' имеет [асинхронный API, который возвращает разметку через обратный вызов] (http://facebook.github.io/react/docs/top-level- api.html # react.rendercomponenttostring) (хотя фактическая реализация не является асинхронной, но API разработан таким образом в случае необходимости в будущем). Таким образом, вам нужно будет изменить это на 'React.renderComponentToString ( , function (markup) {$ (this.getDOMNode()). Popover ({html: true, content: markup});} .bind (this)); '. –
Спасибо, только что исправлено. –
(React v0.9 изменил 'React.renderComponentToString', чтобы иметь синхронный API, просто обновил пример соответственно.) –