ReactJS - как передать ссылку на компонент другому компоненту как проп?
У меня есть два родственных компонента 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 из него. Я использую imageData для анализа QR-кода.
1 ответ
Решение
ref
это реквизит, используемый React внутренне, как key
опора, так что вы можете назвать это как-то еще и относиться к нему как к любой другой опоре WebcamStream
составная часть.
innerRef
является общим именем для пользовательского ссылки, который вы присоединяете к любому из элементов в компоненте.
пример
function WebcamStream(props) {
return <div ref={props.innerRef}> WebcamStream </div>;
}
class CaptureArea extends React.Component {
componentDidMount() {
console.log(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/react@16.6.1/umd/react.production.min.js"></script>
<script src="https://unpkg.com/react-dom@16.6.1/umd/react-dom.production.min.js"></script>
<div id="root"></div>