React.JS Ref 中的 Ref 错误 - createRef、useRef 和 using Refs

Posted

技术标签:

【中文标题】React.JS Ref 中的 Ref 错误 - createRef、useRef 和 using Refs【英文标题】:Ref error in React.JS Ref - createRef, useRef, and using Refs 【发布时间】:2015-01-31 18:00:25 【问题描述】:

我正在尝试通过 React 使用 ref 属性。我的浏览器出现一个奇怪的错误,我无法弄清楚问题所在。 谁能向我解释为什么我会收到此错误:

错误:Invariant Violation: addComponentAsRefTo(...): 只有 ReactOwner 可以有 refs。这通常意味着您正在尝试将 ref 添加到没有所有者的组件(即不是在另一个组件的 render 方法中创建的)。尝试在一个新的***组件中渲染这个组件,该组件将保存 ref。

当我有这个代码时:

/**
* @jsx React.DOM
*/
(function()
var react = require('react');


var App = react.createClass(

    render: function() 
        return (
            <h1 ref="myRef">This is a test</h1>
        );
    

);

react.render(
    <App />,
    document.body
);
());

【问题讨论】:

你想做一个href吗?如果没有,您能解释一下您使用 ref 的目的是什么吗? 感谢您的回复,但我并没有尝试使用href。我正在关注tutorial 如何使用 ref 属性,但没有成功。 好的,我自己尝试了一点。似乎问题在于 h1 被设置为***元素,即所有元素的父元素。这意味着 ref 是多余的,因为外部没有任何东西需要 ref。这就是错误消息试图说明的内容。尝试像教程中的那样扩展您的示例。 感谢您的回复。我最终开始了一个新项目,现在它可以工作了,但我不明白为什么我的旧示例没有。也许是别的什么地方出了问题,而那个错误是万恶之源。不过谢谢。 太棒了。我尝试了更多来找出您的问题,但是该错误非常不一致,因此这里可能存在一些随机性。祝你的新项目好运。 【参考方案1】:

你的代码是正确的。

工作 jsFiddle:http://jsfiddle.net/reactjs/69z2wepo/

var App = React.createClass(

    render: function() 
        return (
            <h1 ref="myRef">This is a test</h1>
        );
    

);

React.render(
    <App />,
    document.body
);

根据错误消息,您将 ref 放置在未拥有的元素上,但在您提供的代码中,h1App 所有。您的代码与上面粘贴的代码不同吗?

注意(from the docs):

In React, an owner is the component that sets the props of other components ... 
It's important to draw a distinction between the owner-ownee relationship and the parent-child relationship. 

【讨论】:

我不知道为什么我的示例不起作用。我最终重新开始,然后我就可以使用 ref 标签了。【参考方案2】:

这个答案可能对你有帮助visit,仔细查看你的代码针对这两个问题,我的错误是后一个问题造成的。 在我的代码中,我写了require("React") require("React-dom"),实际上是require('react'),我修改了我的代码,它起作用了。所有的错误都是由这两个因素造成的。只需完全检查您的代码。

【讨论】:

感谢您的建议。正如之前的评论中提到的,我最终启动了一个新项目来解决这个问题,所以我无法确认你的答案。

以上是关于React.JS Ref 中的 Ref 错误 - createRef、useRef 和 using Refs的主要内容,如果未能解决你的问题,请参考以下文章

如何在 React js 中使用 ref 更改元素的样式

react.js 给标识ref,获取内容

当我在 React js 中使用 forwardRef 将 Ref 从函数组件传递到其他函数组件时出现 TypeError,

打字稿中的错误:“AngularFireStorageModule”类型上不存在属性 .ref

运行 emmeans 的问题(assign '.Last.ref_grid' 中的错误)

#Ref 错误时删除其中一张表