私のルーターのセットアップは以下の通りです
import { createAppContainer, createDrawerNavigator, createStackNavigator, createSwitchNavigator } from "react-navigation";
import Home from "./components/Home";
import Search from "./components/Search";
import Map from "./components/Map";
import Login from "./components/Login";
import ForgotPassword from "./components/ForgotPassword";
import SideMenu from "./SideMenu";
const DashboardStack = createStackNavigator(
{
Home: { screen: Home },
Search : {screen : Search}
}
);
const MapStack = createStackNavigator(
{
Map: { screen: Map },
}
);
const AuthStack = createStackNavigator(
{
Login: { screen: Login },
ForgotPassword: { screen: ForgotPassword },
}
);
export const DrawerStack = createDrawerNavigator(
{
Dashboard: { screen: DashboardStack },
Map: { screen: MapStack },
},
{
contentComponent: SideMenu,
drawerWidth: 250
}
);
export const AppNavigator = createStackNavigator(
{
Drawer: { screen: DrawerStack },
Auth: { screen: AuthStack },
},
{
// initialRouteName: "Drawer",
headerMode: 'none',
mode: 'modal',
}
);
export default createAppContainer(DrawerStack);
すべてが正常に機能し、ほんの小さな問題です。ホームから検索画面に移動し、パラメーター付きのマップ画面に切り替えると、それらのパラメーターがマップ画面に到達しません。
私の現在のセットアップは codepan にあります
あなたの問題は、あなたのMapStackとあなたのMap画面の両方が同じ名前「Map」を持っていることです。
MapStackルートを「MapStack」のような別のものに置き換えるだけで、パラメーターを取得できます。
ここを参照してください: https://snack.expo.io/SyTFUPZUB
export const DrawerStack = createDrawerNavigator(
{
Dashboard: { screen: DashboardStack },
MapStack: { screen: MapStack },
},
{
contentComponent: SideMenu,
drawerWidth: 250
}
);
次のように、マップ画面のパラメータにアクセスできます。
これを更新:
render() {
return (
<SafeAreaView style={styles.container}>
<Text>Map</Text>
</SafeAreaView>
)
}
これに:
render() {
return (
<SafeAreaView style={styles.container}>
<Text>{this.props.navigation.state.params.name}</Text>
</SafeAreaView>
)
}
そしてあなたはあなたの地図画面を家と一緒に置き、次のようにスタックを検索しなければなりません:
import { createAppContainer, createDrawerNavigator, createStackNavigator,
createSwitchNavigator } from "react-navigation";
import Home from "./components/Home";
import Search from "./components/Search";
import Map from "./components/Map";
import Login from "./components/Login";
import ForgotPassword from "./components/ForgotPassword";
import SideMenu from "./SideMenu";
const DashboardStack = createStackNavigator(
{
Home: { screen: Home },
Search : {screen : Search},
Map: { screen: Map },
}
);
const AuthStack = createStackNavigator(
{
Login: { screen: Login },
ForgotPassword: { screen: ForgotPassword },
}
);
export const DrawerStack = createDrawerNavigator(
{
Dashboard: { screen: DashboardStack },
},
{
contentComponent: SideMenu,
drawerWidth: 250
}
);
export const AppNavigator = createStackNavigator(
{
Drawer: { screen: DrawerStack },
Auth: { screen: AuthStack },
} ,
{
// initialRouteName: "Drawer",
headerMode: 'none',
//mode: 'modal',
}
);
export default createAppContainer(DrawerStack);
あなたのスナックの結果:
これがお役に立てば幸いです。
@sfratiniは正しい
問題は、実際には「マップ」キーが2箇所に存在することです。
したがって、navigation.navigate( "Map")はMapStackにナビゲートします。スタックに移動するとは、そのスタックの現在の画面に移動することを意味します。デフォルトでは、initialRouteNameまたはスタックの最初の画面になります。
これを確認するには、別の画面をMapStackの最初の画面として追加し、動作を確認します。
したがって、問題の解決策は、@ sfratiniで提案されているように、「マップ」キーを別の名前に変更することです。
ダッシュボードスタックにマップ画面を追加するだけで正常に動作します
const DashboardStack = createStackNavigator(
{
Home: { screen: Home },
Search : {screen : Search},
Map: { screen: Map }
}
);
次に使用します
this.props.navigation.getParam('name', 'name is coming')
名前のパラメータ値を取得する
これがコードです https://snack.expo.io/HyEFZeyLB