如何从父组件调用DrawerLayoutAndroid上的openDrawer函数?

时间:2017-05-29 18:30:52

标签: reactjs react-native react-native-android

我已经创建了一个设置DrawerLayoutAndroid的组件,我想在我的索引文件中调用它。

drawer.js:

export default class MenuDrawer extends Component {
    constructor(props) {
        super(props);
        this.openDrawer = this.openDrawer.bind(this);
    }
    render() {
        var navigationView = (
            // ...
        );
        return (
            <DrawerLayoutAndroid
                ref={(_drawer) => this.drawer = _drawer}
                drawerWidth={200}
                drawerPosition={DrawerLayoutAndroid.positions.Left}
                renderNavigationView={() => navigationView}>
            {this.props.children}
            </DrawerLayoutAndroid>
        );
    }
    openDrawer() {
        this.drawer.openDrawer();
    }
}

然后我将我的索引文件中的render()函数中的所有内容都包含在内,因为我希望可以从任何地方访问抽屉。我只是想不通如何从索引文件中打开抽屉。我已经尝试了几种不同的方法来调用函数,但我总是得到undefined不是一个对象。

index.android.js

export default class AwesomeProject extends Component {
    constructor(props) {
        super(props);
        this.openMenu = this.openMenu.bind(this);
    }

    render() {
        const { region } = this.props;
        return (
            <MenuDrawer
                ref={(_menudrawer) => this.menudrawer = _menudrawer}
                style={styles.layout}>
                <TouchableHighlight
                    style={styles.topbar}
                    onPress={this.openMenu}>
                <Text>Open</Text>
                </TouchableHighlight>
            </MenuDrawer>
        );
    }

    openMenu() {
            this.refs.menudrawer.openDrawer();
    }
}

这给了我错误“undefined不是一个对象(评估'this.refs.menudrawer.openDrawer')”。

我该如何解决这个问题?

由于

1 个答案:

答案 0 :(得分:1)

看起来不错,你只是错误地访问了menudrawer。它应该是:

this.menudrawer.openDrawer();

因为你的参考是:

ref={(_menudrawer) => this.menudrawer = _menudrawer}