2017-07-19 31 views
0

我只是想添加一个ref到对象,因为我必须清除它的值。 我写这样的:不能添加一个ref到一个将被setState重新加载的对象

this.code = (
    <div className="form-group"> 
      <label className="form-label" htmlFor="target">Target</label> 
      <input className="input" onChange={this.handleChange.bind(this)} ref="textbox" id="target" type="text" placeholder="Target" /> 
     </div> 
); 
this.setState(this.state); 

,得到了如下错误:

Only a ReactOwner can have refs. You might be adding a ref to a component that was not created inside a component's `render` method, or you have multiple copies of React loaded 

所有我想要做的是简单的:如果我点击一个按钮,现有的形式将被清除,和其他一些形式的会出现。为此,我尝试使用setState方法。这是一个错误的方法?

+1

从我知道ref需要一个函数作为输入。你能告诉我们文本框的功能吗? –

+0

@HanaAlaydrus,它不是必需品,而是一种建议的方式。检查此https://stackoverflow.com/questions/38093760/in-react-js-is-there-any-function-similar-like-document-getelementbyid-in-ja/38093981#38093981 –

+0

这似乎你的情况下https ://www.tutorialspoint.com/reactjs/reactjs_refs.htm –

回答

0

只有ReactOwner可以拥有参考。你可能会增加一个裁判,这不是一个组件的render方法, 内部创建一个 组件或你有反应装

按照阵营文件的多个副本:

This usually means one of two things: 

1. You are trying to add a ref to an element that is being created outside of a component's render() function. 
2. You have multiple (conflicting) copies of React loaded (eg. due to a misconfigured NPM dependency) 

你的情况下似乎是第一个,你试图在渲染函数之外创建文档对象。

的解决办法是有一个从渲染函数返回一个文档对象

renderInput =() => { 
    return (
     <div className="form-group"> 
      <label className="form-label" htmlFor="target">Target</label> 
      <input className="input" onChange={this.handleChange.bind(this)} ref={(ref) => this.textbox = ref} id="target" type="text" placeholder="Target" /> 
     </div> 
    ) 
} 
render() { 
    return (
     <div> 
      {this.renderInputForm()} 
     </div> 
    ) 
} 

附:调用的函数React建议使用回调方法而不是字符串参考。检查这个答案:

In React .js: is there any function similar like document.getElementById() in javascript ? how to select certain object?

另外在Invalid Refs情况:

只有ReactOwner可以有裁判。这通常意味着您正在尝试 以将ref添加到没有所有者的组件(即, 未在其他组件的render方法内创建)。尝试使用 将此组件放置在 将容纳参考的新顶级组件内。

相关问题