2015-07-04 125 views
2

新來反應原生,嘗試呈現主頁與導航上的按鈕去用戶頁面。反應原生this.refs.nav未定義

var TourChampIOs = React.createClass({ 

    getInitialState() { 
     .... 
    }, 

    componentWillMount() { 

     .... 
    }, 

    _handleUserDataPress: function() { 

     // Get by ref not prop 
     this.refs.nav.push({ 
      component: UserPage, 
      title: 'User Page' 
     }); 
    },  
    render: function() { 

       return <NavigatorIOS 
        style={styles.container} 
        initialRoute={{ 
         title: 'Tour Champ', 
         component: ThemeList, 
         rightButtonTitle: tc.user.displayName.split(' ')[0], 
         onRightButtonPress: this._handleUserDataPress 
        }}/>; 

     } 

我得到的錯誤是 Error: Cannot read property 'push' of undefined

回答

4

您需要返回時ref屬性分配給您的組件渲染,並給予「NAV」作爲其值

render: function() { 

       return <NavigatorIOS 
        ref="nav" // Here is the change 
        style={styles.container} 
        initialRoute={{ 
         title: 'Tour Champ', 
         component: ThemeList, 
         rightButtonTitle: tc.user.displayName.split(' ')[0], 
         onRightButtonPress: this._handleUserDataPress 
        }}/>; 

     } 
+0

不關注你。你能粘貼示例代碼嗎? – WebQube

+0

你真的不應該在評論中發佈代碼,爲什麼不編輯你的答案呢? – luschn

+0

@luschn是對的 – WebQube

1

我我不確定你想要做什麼,如果使用refs真的適合你想要的。我當然不會使用ref來存儲你想要去點擊的頁面的引用。

我還是選擇做這個醜陋的東西,只是把ref放在渲染函數中: 點擊這個!

檢索在handleClick功能裁判

handleClick = function() { 
    doSomethingWithThisref(this.refs.UserPage); 
    // or 
    // set a new state for this component 
    this.setState({someState:"somedata", function() { 
     React.findDOMNode(this.refs.UserPage); 
    }); 
} 

裁判用於具有參考DOM而不是由陣營渲染函數返回的虛擬DOM。 這是一個很好的例子:https://facebook.github.io/react/docs/more-about-refs.html

順便說一句,你不能訪問this.refs,因爲你可能沒有在渲染函數中設置任何ref。但是,在我看來,你不應該使用處理函數動態地設置ref,而是在渲染函數中。

希望它有幫助

+0

任何人都可以向我解釋爲什麼我收到了投票?我寫了些愚蠢的東西嗎? –

+0

嗯,也許人民投票你只看到了醜陋的事情,沒有看到你說,不建議。 –

+0

啊,順便說一句,如果你不想投票記錄,你可以簡單地刪除你的答案......我最後一次收到投票時做了這個。 –

相關問題