反应本机 this.refs.nav 未定义

react native this.refs.nav is not defined

新反应本机,尝试使用导航按钮呈现主页以转到用户页面。

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

当从 render 返回时,你需要为你的组件分配一个 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
                    }}/>;

        }

我不确定您要做什么,以及 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,因为您可能没有在渲染函数中设置任何引用。但是,在我看来,您不应该使用处理程序动态设置 refs,而应该在渲染函数中设置。

希望对你有帮助