2016-07-27 80 views
3

我嘗試訪問組件中的一些參考。但是我在控制檯中有這個錯誤。 withRouter.js:44 Warning: Stateless function components cannot be given refs (See ref "pseudo" in FormInputText created by RegisterForm). Attempts to access this ref will fail.無狀態功能組件無法提供參考

這裏是我的組件:

class RegisterForm extends React.Component { 

    render() { 
    return (
     <form action=""> 
     <FormInputText ref="pseudo" type="text" defaultValue="pseudo"/> 
     <input type="button" onClick={()=>console.log(this.refs);} value="REGISTER"/> 
     </form> 
    ); 
    } 
} 

另外,當我點擊我的控制檯得到Object {pseudo: null}按鈕。我期望一個對象,而不是null

我不知道爲什麼這不起作用。請注意,我的反應樹使用mobx-react

+0

的[陣營無狀態組件this.refs..value?]可能的複製(http://stackoverflow.com/questions/37266411/react-stateless-component-this-refs-value) –

回答

5

參考文獻不適用於無狀態組件。它在the docs

中解釋因爲無狀態函數沒有後備實例,所以不能將ref附加到無狀態函數組件。

寫入時無狀態組件實際上有實例(它們被內部包裝到類中),但您無法訪問它們,因爲React團隊將來會進行優化。請參閱https://github.com/facebook/react/issues/4936#issuecomment-179909980

+0

是的,我讀了。所以我不確定什麼是無狀態的,因爲我通過使用一個類自動創建一個狀態。 – dagatsoin

+0

另外,例子中沒有任何狀態。是嗎 ? https://facebook.github.io/react/docs/more-about-refs.html#a-complete-example – dagatsoin

+0

@DanielN這個鏈接還解釋了什麼是無狀態組件 – Alik

0

您也可以嘗試使用recompose它具有一個稱爲toClass的功能。

獲取一個函數組件並將其包裝到一個類中。這可以用作需要向組件添加ref的庫的後備,例如Relay。

如果基礎組件已經是一個類,它將返回給定的組件。