У вас есть несколько подходов и обходных путей для достижения этой цели. Одним из них может быть создание изолированного компонента с именем <HeadwayWidget>
и его импорт на вашу страницу / компонент. Вам нужно будет добавить жизненный цикл componentDidMount
, чтобы гарантировать, что ваше дерево DOM загружено. Кроме того, в Gatsby вам нужно будет проверить наличие document
, поскольку в то время, когда вы запрашиваете, он может еще не быть создан.
import React, { Component } from "react";
class HeadwayWidget extends Component {
constructor(props){
super(props);
}
componentDidMount() {
let script, config;
if(typeof document !== undefined){
script = document.createElement("script");
script.async = true;
script.src = "https://cdn.headwayapp.co/widget.js";
document.head.appendChild(script);
config = {
selector: ".headway-badge",
account: "Your_Headway_ID"
};
script.onload = function() {
window.Headway.init(config)
}
}
}
render(){
return (
<div>
<span className="headway-badge" id="headway-badge">
What's New
</span>
</div>
)
}
}
Отсутствует информация о ваших испытаниях, но в подходе, описанном выше, вы используете компонент с отслеживанием состояния. Конечно, вы можете транспилировать его в компонент без состояния, изменив хук componentDidMount
на useEffect
(с пустыми зависимостями, []
).