反应原生this.refs.nav未定义

时间:2015-07-04 10:26:55

标签: javascript facebook react-native

new to react native,尝试使用导航按钮渲染主页面以进入用户页面。

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

2 个答案:

答案 0 :(得分: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
                    }}/>;

        }

答案 1 :(得分:1)

我不确定你要做什么,以及refs的使用是否真的适合你想要的。我当然不会使用ref来存储你想要点击的页面的引用。

我仍然选择做这个丑陋的事情,只需将ref放在渲染函数中:      点击这个!

在handleClick函数中检索ref

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

ref用于引用DOM而不是React呈现函数返回的虚拟DOM。 这是一个很好的例子:https://facebook.github.io/react/docs/more-about-refs.html

顺便说一下,你无法访问this.refs,因为你可能没有在render函数中设置任何ref。但是,在我看来,你不应该使用处理程序动态设置引用,而是在渲染函数中。

希望有所帮助