这对我有用,直接来自文档。请注意,这会重置整个导航状态(props/路线/参数等...)。就我而言,这很好。
https://reactnavigation.org/docs/navigation-prop/
props.navigation.reset({
index: 0,
routes: [{name: "Screen you need to go back to"}]
});
我的应用程序是一个简单的 3 屏幕应用程序,使用 react 导航“底部选项卡导航器”进行本机react。我的所有组件都是功能组件,因此我没有使用文档这一部分中的任何类型的导航操作:https : //reactnavigation.org/docs/navigation-actions。
请参阅下面的堆栈导航。在上面的代码片段中, index: 0 将是下面的屏幕名称“SetGame”。索引:1 是“PlayGame”,索引:2 是“历史”。在我的情况下,我导航回索引 0,即“SetGame”并在导航状态对象中重置路线/参数/历史记录。
<Tab.Navigator
initialRouteName="Find"
tabBarOptions={{
tabStyle: {
backgroundColor: '#76B947',
height: 90,
paddingBottom: 30,
margin: 0,
},
style: {
height: 90,
},
activeTintColor: '#292929',
inactiveTintColor: '#ededed',
}}
>
<Tab.Screen
name="SetGame"
component={SetGame}
options={{
tabBarIcon: ({ color }) => (
<Feather name={'list'} size={25} color={color} />
),
}}
/>
<Tab.Screen
name="PlayGame"
component={PlayGame}
options={{
tabBarIcon: ({ color }) => (
<Feather name={'play'} size={25} color={color} />
),
}}
/>
<Tab.Screen
name="History"
component={GameHistory}
options={{
tabBarIcon: ({ color }) => (
<Feather name={'save'} size={25} color={color} />
),
}}
/>
</Tab.Navigator>
在我的 PlayGame 组件内的应用程序中,有一个 goBackToSetGame 函数。这意味着我们要重置我们的游戏,清除数据库中的数据并重置导航状态。本质上是禁止用户玩游戏,直到它被再次设置。
const goBackToSetGame = async () => {
const gameInputs = {
email: user.profile.email,
players: [],
holes: [],
names: [],
createdAt: Date.now(),
gameStatus: "not-playing",
scores: [{}]
}
await API.QuitGame(gameInputs).then((res) => {
// reset scores state if the game is quit
setScores(null);
console.log("Changed gameStatus from server response: ",
res.data)
})
.catch(err => console.log(err));
// reset props.navigation so you have to
// start a new game before coming back to this screen
props.navigation.reset({
index: 0,
routes: [{name: "SetGame"}]
});
}