我正在用Android创建一个React Native应用。
我对我的renderView方法有条件,但逻辑似乎没有道理。
下面的代码是我的render和renderView方法。我不明白的是下面的renderView方法:
renderView: function(route, navigator) {
if (route.id === 'VaquinhaView') {
return (
<VaquinhaView openDrawer={this.openDrawer} navigator={navigator} />;
)
} else if (route.id === 'HomeView') {
return (
<HomeView openDrawer={this.openDrawer} />
);
}
},
render: function() {
var _renderView = this.renderView;
var _changeView = this.changeView;
return (
<DrawerLayoutAndroid
drawerWidth={deviceWidth - 50}
ref={'SIDE_MENU'}
drawerPosition={DrawerLayoutAndroid.positions.Left}
renderNavigationView={() => <NavigationView changeView={_changeView} />}>
<Navigator
ref={'NAV'}
initialRoute={{
id: 'HomeView',
component: HomeView
}}
configureScene={() => Navigator.SceneConfigs.FloatFromRight}
renderScene={(route, navigator) => _renderView(route, navigator)}>
</Navigator>
</DrawerLayoutAndroid>
);
}
如果我将route.id作为“VaquinhaView”传递,它将返回HomeView组件。我从未见过这样的有条件行为。如果我跨过一行,它会跳到下面。屏幕截图:
我知道它不是递归调用该方法(我已经检查过),并且我尝试用纯JS而不是JSX编写它。
编辑:我也尝试更改语法,但仍然失败:
编辑2(根据要求):
changeView: function(route) {
this.renderView(route, this.refs['NAV']);
this.closeDrawer();
},
致电者:
_this.props.changeView({id: rowData.view});
(rowData.view是 View 的字符串名称)
最佳答案
所以,
事实证明,我认为我不是要直接调用renderView(),而是让导航器执行此操作。这解决了主要问题。
值得记住的是,首先转换了被解释的JS,所以尽管看起来条件满足,但它仍在“else”块中,您可能没有在看正在解释的代码。