[英]How to pass navigator reference to React Native <Drawer/>?
Using react-native-drawer ( https://github.com/root-two/react-native-drawer ) in my index.ios.js, I have the following set up and trying to pass 'navigator' reference into content's < DrawerPanel /> of < Drawer />. 在index.ios.js中使用react-native-drawer( https://github.com/root-two/react-native-drawer ),我进行了以下设置,并尝试将“导航器”引用传递到内容的< <Drawer />的DrawerPanel />。 I console.log(this.props.navigator) in < DrawerPanel /> but a wrong navigator reference is passed in, when I am attempting to do similar to this.props.navigator.replace() inside < DrawerPanel /> 我尝试在<DrawerPanel />中执行与this.props.navigator.replace()类似的操作时,在<DrawerPanel />中进行console.log(this.props.navigator),但传入了错误的导航器引用。
How can I pass in the right navigator constructor like that of being passed into renderScene and configureScene? 如何像传入renderScene和configureScene一样传递正确的导航器构造函数? : :
class practice extends Component {
...
renderScene(route, navigator){
...
}
configureScene(route, routeStack){
...
}
render() {
return (
<Drawer
content={<DrawerPanel navigator={navigator}/>}
...
>
<Navigator
configureScene={this.configureScene}
initialRoute={{name: 'Login', component: Login}}
renderScene={this.renderScene}
style={styles.container}
navigationBar={
<Navigator.NavigationBar
style={styles.navBar}
routeMapper={NavigationBarRouteMapper(this.openDrawer)}
/>
}
/>
</Drawer>
);
}
}
Thank you in advance! 先感谢您!
UPDATE 3**** 更新3 ****
In my <DrawelPanel/>
在我的<DrawelPanel/>
import HomePage from './HomePage'
render(){
var pr = this.props
var navigator = pr.getNav()
return (
<View style={{flex:1, padding: 30, backgroundColor: 'black'}}>
<MadeButton
componentName={HomePage}
navigator={navigator}
pageName='HomePage'
style={{fontSize:15, fontWeight:'bold', color:'white'}}
/>
</View>
)
Then in my <MadeButton/>
然后在我的<MadeButton/>
static propTypes = {
componentName: React.PropTypes.any,
navigator: React.PropTypes.any,
pageName: React.PropTypes.string,
style: React.PropTypes.object
}
_navigate(type='Normal'){
this.props.navigator.replace({
component: this.props.componentName,
type: type,
name: this.props.pageName
})
}
render(){
var pr = this.props;
var st = this.state;
var styles = pr.style;
return(
<TouchableHighlight onPress={() => this._navigate()}>
<Text style={styles}>{pr.pageName}</Text>
</TouchableHighlight>
)
}
This is how it should be done. 这是应该做的。 You save the navigator reference form renderScene
method define a getter method, pass the method to the component you want. 您保存导航器参考表单的renderScene
方法,定义一个getter方法,将该方法传递给所需的组件。
class practice extends Component { ... renderScene(route, navigator){ this._navigator = navigator } configureScene(route, routeStack){ ... } getNav = () => { return this._navigator } render() { return ( <Drawer content={<DrawerPanel getNav={this.getNav}/>} ... > <Navigator configureScene={this.configureScene} initialRoute={{name: 'Login', component: Login}} renderScene={(route, navigator) => this.renderScene(route, navigator)} style={styles.container} navigationBar={ <Navigator.NavigationBar style={styles.navBar} routeMapper={NavigationBarRouteMapper(this.openDrawer)} /> } /> </Drawer> ); } }
I think you are wrong. 我认为你错了。 If you use , should not has the same parent node with . 如果使用,则不应与拥有相同的父节点。
const Drawer = <Drawer
content={<DrawerPanel navigator={navigator}/>}
...
/>
<Navigator
initialRoute={{ name: 'Drawer', component: Drawer }}
renderScene={(route, navigator) =>
configureScene={(route) => {
return Navigator.SceneConfigs.VerticalDownSwipeJump;
}}
renderScene={(route, navigator) => {
let Component = route.component;
return <Component {...route.params} navigator={navigator} />
}} />
}
/>
In update 2, you have done: var navigator = pr.getNav
. 在更新2中,您已完成: var navigator = pr.getNav
。 This only assigns getNav function to the navigator variable you just defined. 这只会将getNav函数分配给您刚定义的导航器变量。 So your navigator here is just a reference to the getNav function. 因此,这里的导航器只是对getNav函数的引用。
What you need to do is var navigator = pr.getNav()
and then pass the navigator to MadeButton
. 您需要做的是var navigator = pr.getNav()
,然后将导航器传递给MadeButton
。 Hope is clarify things. 希望是澄清事情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.