从导航器外部向 Drawer Navigator 的 contentComponent 发送参数
Sending parameters to contentComponent of Drawer Navigator from outside the navigator
我有一个嵌入了 DrawerNavigator 的屏幕。
import React, { Component } from "react";
import { GlobalNavigator } from "../navigators/globalNavigator";
export default class GlobalScreen extends Component {
constructor(props) {
super(props);
this.doSomething= this.doSomething.bind(this);
}
doSomething() {
// do something
}
render() {
return (
<GlobalNavigator doSomething={this.doSomething} />
);
}
}
我有一个抽屉导航器,我在其中指定了 "contentComponent"。
import React from "react";
import { DrawerNavigator } from "react-navigation";
import MainScreen from "../screens/mainScreen";
import MenuContent from "../components/menuContent";
export const GlobalNavigator = DrawerNavigator(
{
Main: {
screen: MainScreen
}
},
{
drawerWidth: 350,
drawerPosition: "left",
initialRouteName: "Main",
backBehavior: "initialRoute",
contentComponent: props => <MenuContent {...props} />
}
);
我想从屏幕向导航器发送一个参数,以便我可以将其传递给 "contentComponent"。我怎样才能做到这一点?我尝试使用 "screenProps" 但这在 "props" 中不存在:contentComponent: props => <MenuContent {...props} />
1.store GlobalScreen 实例
import React, { Component } from "react";
import { GlobalNavigator } from "../navigators/globalNavigator";
var globalScreen = undefined;
export default class GlobalScreen extends Component {
constructor(props) {
super(props);
globalScreen = this;
this.doSomething= this.doSomething.bind(this);
}
doSomething() {
// do something
}
//param to contentComponent
param = {abc:'123'};
someMethod = ()=>{
//code
};
render() {
return (
<GlobalNavigator doSomething={this.doSomething} />
);
}
}
2.give contentComponent 获取globalScreen的方法props
export const GlobalNavigator = DrawerNavigator(
{
Main: {
screen: MainScreen
}
},
{
drawerWidth: 350,
drawerPosition: "left",
initialRouteName: "Main",
backBehavior: "initialRoute",
contentComponent: props => <MenuContent getMainScreen={() => {return globalScreen;} } {...props} />
}
);
3.in 菜单内容
let globalScreen = this.props.getMainScreen();
let param = globalScreen.param;//param you want to pass to menuContent
globalScreen.someMethod();//method in globalScreen
实现,但不是很优雅....
我有一个嵌入了 DrawerNavigator 的屏幕。
import React, { Component } from "react";
import { GlobalNavigator } from "../navigators/globalNavigator";
export default class GlobalScreen extends Component {
constructor(props) {
super(props);
this.doSomething= this.doSomething.bind(this);
}
doSomething() {
// do something
}
render() {
return (
<GlobalNavigator doSomething={this.doSomething} />
);
}
}
我有一个抽屉导航器,我在其中指定了 "contentComponent"。
import React from "react";
import { DrawerNavigator } from "react-navigation";
import MainScreen from "../screens/mainScreen";
import MenuContent from "../components/menuContent";
export const GlobalNavigator = DrawerNavigator(
{
Main: {
screen: MainScreen
}
},
{
drawerWidth: 350,
drawerPosition: "left",
initialRouteName: "Main",
backBehavior: "initialRoute",
contentComponent: props => <MenuContent {...props} />
}
);
我想从屏幕向导航器发送一个参数,以便我可以将其传递给 "contentComponent"。我怎样才能做到这一点?我尝试使用 "screenProps" 但这在 "props" 中不存在:contentComponent: props => <MenuContent {...props} />
1.store GlobalScreen 实例
import React, { Component } from "react";
import { GlobalNavigator } from "../navigators/globalNavigator";
var globalScreen = undefined;
export default class GlobalScreen extends Component {
constructor(props) {
super(props);
globalScreen = this;
this.doSomething= this.doSomething.bind(this);
}
doSomething() {
// do something
}
//param to contentComponent
param = {abc:'123'};
someMethod = ()=>{
//code
};
render() {
return (
<GlobalNavigator doSomething={this.doSomething} />
);
}
}
2.give contentComponent 获取globalScreen的方法props
export const GlobalNavigator = DrawerNavigator(
{
Main: {
screen: MainScreen
}
},
{
drawerWidth: 350,
drawerPosition: "left",
initialRouteName: "Main",
backBehavior: "initialRoute",
contentComponent: props => <MenuContent getMainScreen={() => {return globalScreen;} } {...props} />
}
);
3.in 菜单内容
let globalScreen = this.props.getMainScreen();
let param = globalScreen.param;//param you want to pass to menuContent
globalScreen.someMethod();//method in globalScreen
实现,但不是很优雅....