ReactJS - 如何将组件引用作为道具传递给另一个组件?

Posted

技术标签:

【中文标题】ReactJS - 如何将组件引用作为道具传递给另一个组件?【英文标题】:ReactJS - how to pass component reference to another component as prop? 【发布时间】:2019-04-14 14:28:47 【问题描述】:

我有两个兄弟组件WebcamStreamCaptureArea,我想将WebcamStream 的引用作为CaptureArea 的属性传递,但是当我这样做时,它总是为空。如何解决这个问题?

class AppContent extends React.Component 
    constructor(props) 
        super(props);
        this.videoTag = React.createRef();
    

    render() 
        return (
            <div id="content">
                <WebcamStream ref=this.videoTag
                                
                              title="Real-time video stream from webcam" 
                              id="video" />
                <CaptureArea x="20" y="20"  
                              color="white" 
                             videoTag=this.videoTag.current/>
            </div>
        );
    

我为什么需要这个: CaptureArea 在当前的 video 标签上生成临时画布,以从中获取 imageData。我使用 imageData 来解析二维码。

【问题讨论】:

【参考方案1】:

ref 是 React 内部使用的一个 prop,很像 key prop,因此您可以将其命名为其他名称,并将其视为 WebcamStream 组件中的任何其他 prop。

innerRef 是您附加到组件中任何元素的自定义 ref 的通用名称。

示例

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
          
          
          title="Real-time video stream from webcam"
          id="video"
        />
        <CaptureArea
          x="20"
          y="20"
          
          
          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>

【讨论】:

以上是关于ReactJS - 如何将组件引用作为道具传递给另一个组件?的主要内容,如果未能解决你的问题,请参考以下文章

VueJs:将动态组件作为道具传递给另一个组件并渲染它们

如何将从数据库接收到的数据作为道具传递给 Reactjs 中的另一个组件

将组件作为道具传递时在 Flow 中键入 React 组件

使用 React Hooks 获取帖子并将它们作为附加道具传递给另一个组件

reactjs中如何将可选元素作为prop传递给组件

如何将一个道具作为变量传递给 React 中的另一个道具?