Хорошо, я понял это. Проблема заключалась в том, что я получал ссылки в своем HO C, тогда как я должен был сделать это в моем обернутом компоненте. React.forwardRef
это немного вводящее в заблуждение имя, которое я бы сказал.
Так как в HO C NewComponent
в основном относится к любому компоненту, который мы обертываем его с HO C, мы можем создать ссылку, используя useRef
ловушку в этом новом возвращенном компоненте HO C и ссылаться на наш оригинальный компонент. Теперь, если мы не будем пересылать ссылку, она будет ссылаться на сам компонент, а не на div внутри компонента. Таким образом, внутри обернутого компонента Map.js
нам нужно перехватить эту ссылку с помощью React.forwardRef(props, ref)
и, наконец, установить для ссылки элемент div внутри оператора return <div className="map" style={mapStyles} name={name} ref={ref} ></div>
.
Полный пример:
const withMap = (OriginalComponent) => {
const NewComponent = (props) => {
const mapRef = useRef();
scriptLoader("https://maps.googleapis.com/maps/api/js?key=?&libraries=geometry&")
.then((res) => {
console.log(res)
const map = new window.google.maps.Map(mapRef.current, {
center: {lat: parseFloat(54.9065), lng: parseFloat(25.3189)},
zoom: 6
})
})
.catch((err) => {
console.log(err);
})
return <OriginalComponent name="hello" ref={mapRef} />
}
return NewComponent;
}
Оригинальный упакованный компонент:
const Map = React.forwardRef((props, ref) => {
const { name } = props;
useEffect(() => {
})
return (
<div>
<div className="map" style={mapStyles} name={name} ref={ref} ></div>
</div>
);
});