У меня есть два родственных компонента WebcamStream и CaptureArea, я хочу передать ссылку на WebcamStream в качестве опоры CaptureArea, но когда я это делаю, она всегда равна нулю. Как это исправить?
class AppContent extends React.Component {
constructor(props) {
super(props);
this.videoTag = React.createRef();
}
render() {
return (
<div id = "content">
<WebcamStream ref = {this.videoTag}
width = "300" height = "300"
title = "Real-time video stream from webcam"
id = "video" />
<CaptureArea x = "20" y = "20" width = "120"
height = "120" color = "white"
videoTag = {this.videoTag.current}/>
</div>
);
}
}
Зачем мне это нужно:CaptureArea генерирует временный холст на текущем теге video, чтобы получить из него данные изображения. Я использую imageData для анализа QR-кода.





ref - это опора, используемая React внутри, во многом как опора key, поэтому вы можете назвать ее как-нибудь иначе и рассматривать ее как любую другую опору в компоненте WebcamStream.
innerRef - это общее имя для настраиваемой ссылки, которую вы прикрепляете к любому из элементов в компоненте.
Пример
function WebcamStream(props) {
return <div ref = {props.innerRef}> WebcamStream </div>;
}
class CaptureArea extends React.Component {
componentDidMount() {
console.info(this.props.videoTag.current);
}
render() {
return <div> CaptureArea </div>;
}
}
class AppContent extends React.Component {
videoTag = React.createRef();
render() {
return (
<div id = "content">
<WebcamStream
innerRef = {this.videoTag}
width = "300"
height = "300"
title = "Real-time video stream from webcam"
id = "video"
/>
<CaptureArea
x = "20"
y = "20"
width = "120"
height = "120"
color = "white"
videoTag = {this.videoTag}
/>
</div>
);
}
}
ReactDOM.render(<AppContent />, document.getElementById("root"));<script src = "https://unpkg.com/[email protected]/umd/react.production.min.js"></script>
<script src = "https://unpkg.com/[email protected]/umd/react-dom.production.min.js"></script>
<div id = "root"></div>