StackActions 参考
StackActions
是一个包含用于生成特定于基于栈的导航器的 action 方法的对象。它的方法扩展了 CommonActions
中可用的 action。
支持以下 action
replace
replace
action 允许替换导航状态中的路由。它接受以下参数
name
- string - 已在某处注册的路由的目标名称。params
- object - 要传递给目标路由的参数。
- 静态
- 动态
navigation.dispatch(
StackActions.replace('Profile', { user: 'Wojtek' })
);
navigation.dispatch(
StackActions.replace('Profile', { user: 'Wojtek' })
);
如果要替换特定路由,可以添加一个 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' }));
navigation.dispatch(StackActions.push('Profile', { user: 'Wojtek' }));
pop
pop
action 将您带回到栈中的上一个屏幕。它接受一个可选参数 (count
),您可以使用该参数指定要返回多少个屏幕。
- 静态
- 动态
navigation.dispatch(StackActions.pop(1));
navigation.dispatch(StackActions.pop(1));
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());
navigation.dispatch(StackActions.popToTop());