什么是“只有ReactOwner可以具有引用”。意思?

我有一个react带有表单的简单组件:

var AddAppts = React.createClass({
    handleClick: function() {
        var title = this.refs.title.getDOMNode().value;
        ....

        var appt = {
            heading: title
            ...
        }

        CalendarActions.addAppointment(appt);
    },

    render: function() {
        return (
            <div>
                <label>Description</label>
                <input ref="title"></input>
                ...
            </div>
        );
    }
});
module.exports = AddAppts;

我正在尝试render在另一个react组件中使用组件:

  var AddAppt = require('./AddAppts');

  render: function() {
    return (
      <div>
        <AddAppt />
      </div>
    );
  }

但是我得到这个错误:

 Uncaught Error: Invariant Violation: addComponentAsRefTo(...): Only a ReactOwner can have refs. This usually means that you're trying to add a ref to a component that doesn't have an owner (that is, was not created inside of another component's `render` method). Try rendering this component inside of a new top-level component which will hold the ref.

我已经用谷歌搜索了,但是无法弄清楚该问题的解决方法。

猪猪飞云古一2020/03/18 15:49:11

代替

<input ref="title"></input>

尝试这个

<input ref={(title) => this.title = title}></input>
斯丁老丝GO2020/03/18 15:49:11

给定的解决方案对我没有用,尽管它们确实可以帮助我了解在哪里看。

由于某种原因,我的项目有两个node_modules文件夹-一个在根目录中,一个在上级文件夹中。我是React的新手,所以我不知道这是正常的还是什么。当我开始一个新项目时,我只是使用Visual Studio给我的东西。

无论如何,我知道哪些模块是造成问题,它碰巧只存在一个对的node_modules文件夹。

我将问题模块移至另一个node_modules文件夹。问题解决了。

TomGreen2020/03/18 15:49:10

此答案相似,我在使用单独的模块并使用yarn link

解决方案是yarn unlink module-name在项目的工作目录中运行。然后node_modules我撤离并跑步,yarn upgrade module-nameyarn采取适当措施。

飞云神无2020/03/18 15:49:10

在将package.json文件上一个级别后,我看到了此错误,因此node_modules我的项目中有2个目录(一个在./node_modules另一个目录中./web/node_modules)。删除旧目录可解决此问题。

神无Tom2020/03/18 15:49:10

在开发使用链接到测试项目的react模块时,我看到了此错误npm link切换到常规依赖项可以解决此问题。

看来React不喜欢npm link

村村伽罗十三2020/03/18 15:49:10

重新布置脚本解决了该问题。

错误。

<script src="./lib/react.js"></script>
<script src="./lib/react-dom.js"></script>
<script src="./lib/react-with-addons.js"></script>

正确

<script src="./lib/react.js"></script>
<script src="./lib/react-with-addons.js"></script>
<script src="./lib/react-dom.js"></script>

参考https://github.com/gcanti/tcomb-form/issues/107#issuecomment-150891680

猿Stafan2020/03/18 15:49:10

当我使用的组件模块安装了自己的react依赖项时,我遇到了此错误。所以我使用了多个版本的React。

确保不目录下的反应dependencies在你的package.json
这就是为什么我们有peerDependencies;-)