我有两个同级组件WebcamStream
和CaptureArea
,我想传递对WebcamStream
的引用作为CaptureArea
的支持,但是当我这样做时,它始终为null。该如何解决?
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 Code。
答案 0 :(得分:1)
ref
是React内部使用的props,与key
prop一样,因此您可以命名其他东西,并像WebcamStream
组件中的任何其他prop一样对待它。 >
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>