React Navigation中StackActions reference

StackActions


方法详解:

replace

StackActions.replace('Profile', { user: 'Wojtek' })
在这里插入图片描述
默认替换栈顶元素

push

StackActions.push('Profile', { user: 'Wojtek' })
在这里插入图片描述

pop

里面的参数是你希望多少screen出栈
StackActions.pop(1)

popToTop

StackActions.popToTop()
在这里插入图片描述


代码:

import * as React from 'react';
import { View, Button, Text } from 'react-native';
import { NavigationContainer, StackActions } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';

function HomeScreen({ navigation }) {
  return (
    <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
      <Text>Home!</Text>
      <Button
        title="Push Profile on the stack"
        onPress={() =>{
          console.log(StackActions.push('Profile', { user: 'Wojtek' }));
          navigation.dispatch(StackActions.push('Profile', { user: 'Wojtek' }))
        }}
      />
      <Button
        title="Replace with Profile"
        onPress={() =>{
          console.log(StackActions.replace('Profile', { user: 'Wojtek' }));
          navigation.dispatch(
            StackActions.replace('Profile', { user: 'Wojtek' })
          )
        }}
      />
    </View>
  );
}

function ProfileScreen({ navigation, route }) {
  return (
    <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
      <Text>Profile!</Text>
      <Text>{route.params.user}'s profile</Text>
      <Button
        title="Push same screen on the stack"
        onPress={() => {console(navigation.dispatch(StackActions.pop(1)));navigation.dispatch(StackActions.pop(1))}}
      />
      <Button
        title="Pop one screen from stack"
        onPress={() => {
          console.log(StackActions.push('Profile', { user: 'Wojtek' }));
          navigation.dispatch(StackActions.push('Profile', { user: 'Wojtek' }))
        }}
      />
      <Button
        title="Pop to top"
        onPress={() => {console.log(StackActions.popToTop());navigation.dispatch(StackActions.popToTop())}}
      />
    </View>
  );
}

const Stack = createStackNavigator();

export default function App() {
  return (
    <NavigationContainer
      onStateChange={state => {
        console.log(state);
      }}>
      <Stack.Navigator
        screenOptions={navigation => {
          console.log(navigation);
        }}>
        <Stack.Screen name="Home" component={HomeScreen} />
        <Stack.Screen name="Profile" component={ProfileScreen} />
      </Stack.Navigator>
    </NavigationContainer>
  );
}

过程详解:

  • 当一加载Home主页(navigation)
    在这里插入图片描述
  • PUSH PROFILE ON THE STACK
    在这里插入图片描述
    在这里插入图片描述
  • PUSH SAME SCREEN ON THE STACK
    在这里插入图片描述
    在这里插入图片描述
  • POP SAME SCREEN ON THE STACK
    在这里插入图片描述
  • POP TO TOP
    只让最顶上的出栈
    在这里插入图片描述
    在这里插入图片描述
  • REPLACE WITH PROFILE
    替换栈顶上的元素
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值