我需要将同一屏幕的多个实例推送到堆栈,而
.navigate()
没有实现这一点。它只是导航到堆栈上已有的实例(与无操作相同)。 .push
已从 navigation
和 CommonActions
(以前的 StackActions
)中删除。
我自己找到了答案:
import { CommonActions } from "@react-navigation/native";
const state = navigation.getRootState().state;
const routes = state.routes;
routes.push({
key: `ScreenName-${uniqueKey}`,
name: "ScreenName",
params: screenNameNavProps,
});
navigation.dispatch(CommonActions.reset({ ...state, index: state.index + 1, routes });
确保将
ScreenName
更改为您的屏幕名称,并为 uniqueKey
分配一个唯一的键(我使用了屏幕导航道具中的唯一键)。
就我而言,这是一个打字问题。
push
方法仍然存在(参见这里)。
我正在输入这样的导航道具:
navigation: NavigationProp<RootNavigatorType>;
从
"@react-navigation/native";
进口
但是push方法在堆栈导航器中,所以我必须为此替换上面的方法:
navigation: NativeStackNavigationProp<MyCustomNavigatorType>;
从
"@react-navigation/native-stack"
进口