ReactJS - 如何将组件引用作为道具传递给另一个组件?
ReactJS - how to pass component reference to another component as prop?
我有两个同级组件 WebcamStream
和 CaptureArea
,我想将对 WebcamStream
的引用作为 CaptureArea
的 prop 传递,但是当我这样做时,它总是无效的。如何解决这个问题?
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
标签上生成临时 canvas 以从中获取图像数据。我使用 imageData 解析二维码。
ref
是 React 内部使用的一个 prop,与 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>
我有两个同级组件 WebcamStream
和 CaptureArea
,我想将对 WebcamStream
的引用作为 CaptureArea
的 prop 传递,但是当我这样做时,它总是无效的。如何解决这个问题?
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
标签上生成临时 canvas 以从中获取图像数据。我使用 imageData 解析二维码。
ref
是 React 内部使用的一个 prop,与 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>