JSFiddle - React, Tailwind, and code Playground

HTML

<div id="map"></div>

CSS

</style>
<script type="text/javascript" src="https://api-maps.yandex.ru/2.1/?lang=ru-RU"></script>
<script type="text/javascript" src="https://yandex.st/jquery/2.1.0/jquery.min.js"></script>
<style>
        html, body, #map {
            width: 100%; height: 100%; padding: 0; margin: 0;
        }

JavaScript

ymaps.ready(init);

function init () {
    var myMap = new ymaps.Map('map', {
            center: [55.76, 37.64],
            zoom: 10
        }, {
            searchControlProvider: 'yandex#search'
        }),
        BalloonContentLayout = ymaps.templateLayoutFactory.createClass('<b>{{ properties.balloonContent|default:"загрузка..." }}</b>', {
                build: function () {
                    BalloonContentLayout.superclass.build.apply(this, arguments);
                    var obj = this.getData().object;
                    if(!obj.properties.balloonContent) {
                        loadBalloonData(obj.id)
                        .then(function (data) {
                            obj.properties.balloonContent = data;
                            this.rebuild();
                        }, this);
                    }
                }
            }),
        objectManager = new ymaps.ObjectManager({
            // Мы хотим загружать данные для балуна перед открытием, поэтому
            // запретим автоматически открывать балун по клику.
            // geoObjectOpenBalloonOnClick: false
            geoObjectBalloonContentLayout: BalloonContentLayout
        });

    myMap.geoObjects.add(objectManager);


    $.ajax({
        url: "//sandbox.api.maps.yandex.net/examples/ru/2.1/object_manager_balloon_async/data.json"
    }).done(function(data) {
            objectManager.add(data);
        });

    // Функция, эмулирующая запрос за данными на сервер.
    function loadBalloonData (objectId) {
        var dataDeferred = ymaps.vow.defer();
        function resolveData () {
            dataDeferred.resolve('Данные балуна');
        }
        window.setTimeout(resolveData, 1000);
        return dataDeferred.promise();
    }

}