跳到主要内容
版本:7.x

StackActions 参考

StackActions 是一个包含用于生成特定于基于栈的导航器的 action 方法的对象。它的方法扩展了 CommonActions 中可用的 action。

支持以下 action

replace

replace action 允许替换导航状态中的路由。它接受以下参数

  • name - string - 已在某处注册的路由的目标名称。
  • params - object - 要传递给目标路由的参数。
navigation.dispatch(
StackActions.replace('Profile', { user: 'Wojtek' })
);
Snack 上尝试

如果要替换特定路由,可以添加一个 source 属性来引用路由键,并添加 target 属性来引用导航状态键

import { StackActions } from '@react-navigation/native';

navigation.dispatch({
...StackActions.replace('Profile', {
user: 'jane',
}),
source: route.key,
target: navigation.getState().key,
});

如果 source 属性显式设置为 undefined,它将替换焦点路由。

push

push action 在栈的顶部添加一个路由,并向前导航到该路由。这与 navigate 的不同之处在于,如果给定名称的路由已存在于栈中,navigate 将会返回到栈中较早的位置。push 将始终添加到顶部,因此一个路由可以多次存在。

  • name - string - 要推送到栈上的路由的名称。
  • params - object - 要传递给目标路由的屏幕参数。
navigation.dispatch(StackActions.push('Profile', { user: 'Wojtek' }));
Snack 上尝试

pop

pop action 将您带回到栈中的上一个屏幕。它接受一个可选参数 (count),您可以使用该参数指定要返回多少个屏幕。

navigation.dispatch(StackActions.pop(1));
Snack 上尝试

popTo

popTo action 通过名称将您带回到栈中的上一个屏幕。它还允许您将参数传递给路由。

如果在栈中找不到匹配的屏幕,这将弹出当前屏幕并添加一个具有指定名称和参数的新屏幕 - 本质上表现得像 replace。这确保了如果具有该名称的先前屏幕不存在(当屏幕从深度链接或推送通知打开时,或者在 Web 等上使用时,可能会发生这种情况),应用程序不会崩溃。

该方法接受以下参数

  • name - string - 要导航到的路由的名称。
  • params - object - 要传递给目标路由的屏幕参数。
  • merge - boolean - 参数是应与现有路由参数合并还是替换它们(当导航到现有屏幕时)。默认为 false
import { StackActions } from '@react-navigation/native';

const popToAction = StackActions.popTo('Profile', { user: 'jane' });

navigation.dispatch(popToAction);

popToTop

popToTop action 将您带回到栈中的第一个屏幕,并关闭所有其他屏幕。它在功能上与 StackActions.pop({n: currentIndex}) 相同。

navigation.dispatch(StackActions.popToTop());
Snack 上尝试