使用Navigator
,我需要一个右键来修改顶级视图的状态。
使用Navigator
和自定义NavigationBarRouteMapper
,我可以为按钮操作实现除之外的所有。
使用此Navigator
实施:
<Navigator
ref='navigator'
style={styles.appContainer}
initialRoute={{name: initialRootView.title, component: initialRootView.view}}
navigationBar={
<Navigator.NavigationBar
routeMapper={NavigationBarRouteMapper}
style={styles.navBar}
/>
}
configureScene={() => {
return Navigator.SceneConfigs.FloatFromRight;
}}
renderScene={(route, navigator) => {
if (route.component) {
// add `navigator` and `cache` as props to any top-level component that gets pushed
// onto the navigation stack.
return React.createElement(route.component, { navigator: navigator, cache: this.state.cache, ...route.props });
}
}}
/>
这是NavigationBarRouteMapper
:
var NavigationBarRouteMapper = {
RightButton: function(route, navigator, index, navState) {
console.log(route.component);
return (
<TouchableOpacity
onPress={route.component.onRightButton}
style={{width: 100, height: 44, justifyContent: 'center', alignItems: 'center'}}>
<Text>Right Button</Text>
</TouchableOpacity>
);
},
};
这会正确呈现正确的按钮,而我的顶级组件有一个函数onRightButton
。但是为什么它永远不会被称为?
在RightButton
的上下文中进行一些调试,route.component.prototype.hasOwnProperty('onRightButton')
会返回true
,但route.component.hasOwnProperty('onRightButton')
会返回false
。这怎么可能?返回的route.component
引用有什么奇怪的?
任何帮助表示感谢。
答案 0 :(得分:4)
您可以在路线中传递任何您想要的东西。例如:
initialRoute={{name: initialRootView.title, component: initialRootView.view onRightButton: (() => {console.log('hi')})}}
然后你可以通过以下方式在RightButton中访问它:
onPress={route.onRightButton}
在您的示例中,您尝试从组件的React Component Class访问一个函数,该函数不会公开该函数。
答案 1 :(得分:2)