Попытка интегрировать медиаплеер Azure в React JS. но зависимая от Azure функция lib lib не нашла "amp"

Это мой код файла JS для рендеринга медиаплеера. componentDidMount() Я импортировал js-файл при загрузке этой страницы и во время рендеринга вызывал функцию 'amp' с параметром options.

 componentDidMount () {
        const script = document.createElement("script");

        script.src = "//amp.azure.net/libs/amp/2.1.5/azuremediaplayer.min.js";
        script.async = true;

        document.body.appendChild(script);
    }
    render() { 
            var myOptions = {
                "nativeControlsForTouch": false,
                controls: true,
                autoplay: true,
                width: "640",
                height: "400",
            }
            var myPlayer = amp("azuremediaplayer", myOptions);
            myPlayer.src([
                    {
                            "src": "//amssamples.streaming.mediaservices.windows.net/91492735-c523-432b-ba01-faba6c2206a2/AzureMediaServicesPromo.ism/manifest",
                            "type": "application/vnd.ms-sstr+xml"
                    }
            ]);       
            return (

                <div className="form-horizontal">
                    <div className="form-group">
                        <div className="col-sm-4">Azure Media Player</div>
                        <div className="col-sm-6">
                        <video id="azuremediaplayer" class="azuremediaplayer amp-default-skin amp-big-play-centered" tabindex="0"></video>
                        </div>
                    </div>
                </div>
            );
        }
    }

export default AddItemForm;

И консоль выдает эту ошибку ** Строка 26: "amp" не определен no-undef**

2 ответа

Я думаю, что если вы загрузите скрипт игрока в синхронизации, как script.async = false;, это будет работать правильно.. Я знаю, что это повредит производительности, но, к сожалению, это способ загрузки этого странно упакованного плеера! .. Я ненавижу тот факт, что они не сделали пакет npm для этого!!

Вы можете предоставить обратный вызов onload для вашего скрипта следующим образом:

script.onload = () => this.setState({libraryLoaded: true})

И тогда вы можете реагировать на состояние внутри метода рендеринга

render() {
  if (!this.state.libraryLoaded) {
    return <span>Loading...</span>
  } else {
    return ... // your component
  }
}

Не забудьте инициировать состояние с libraryLoaded: false

Вы также можете проверить мой пакет, который в основном выполняет эту загрузку под капотом.

Другие вопросы по тегам