这似乎是一个简单的解决方案(因为它对我来说很直观),但我无法找到任何可行的解决方案。
这是我的导航器 - 渲染方法代码:
render() {
return (
<Navigator initialRoute={{title:'Games', component:Games}}
configureScene={() => {
return Navigator.SceneConfigs.FloatFromRight;
}}
renderScene={(route, navigator) =>
{
if (route.component) {
return React.createElement(route.component, {navigator});
}
}
} />
);
}
以下是我传递道具的方式:
this.props.navigator.push({title: 'MainActivity', component:MainActivity, gameKey:key, passProps:{title:'bla'}});
这是一个MainActivity,我想要获得这些道具。
我试过了:
this.props.route.gameKey,
this.route.gameKey,
this.props.gameKey
既不起作用,我明白可能是我应该通过renderScene专门传递这些道具,反之亦然。可能是通过createElement传递路径?
请帮忙。
问题更严重,因为我已经通过导航器将道具从一个活动传递到另一个活动。
因此,每次需要时(从任何活动到任何活动)都会使用的解决方案正在使用
return React.createElement(route.component, {navigator, route});
感谢@stereodenis。
在任何活动中像这样推送后:this.props.navigator.push({title: 'MainActivity', component:MainActivity, gameKey:key, passProps:{title:'bla'}});
然后通过:this.props.route.gameKey
为了完全清楚 - 路由现在是可访问的,因为每次U推送时都会在createElement中传递{navigator,route},所以这是另一个道具。
答案 0 :(得分:3)
Navigator组件的renderScene应为:
{ title, gameKey, passProps } = route;
return React.createElement(route.component, {
navigator,
title,
gameKey,
passProps
})
答案 1 :(得分:1)
passProps更多。对于Navigator,renderScene将完成工作。通常,推送路由名称。 renderScene将决定声明性JSX中的组件和属性。
推送:
this.props.navigator.push({name: 'Main', gameKey: someKey});
RenderScene:
renderScene(route, navigator) {
let component;
switch(route.name) {
case 'Main':
component = <MainActivity title="Main Activity" gameKey={route.gameKey} />;
default:
component = null;
}
return component;
}