如何刷新到特定屏幕?

时间:2018-10-18 09:00:12

标签: android reactjs react-native

我是React Native的新手

我有路线外观:

  

ScreenA-> ScreenB-> ScreenC

现在我想从ScreenC重新导航到ScreenA,我使用this.props.navigation.navigate('ScreenA');

  

但是我知道事实,我得到了以前的屏幕A(不是新屏幕),或者我可以说   就像回到以前的屏幕方法一样。我想要类似于   Intent intent = Android Native中的新Intent(ScreenA)。谁能帮忙   解决吗?

已更新:

我有2个路由组,可能会导致真正的问题:

StackNavigator {
 screenA,
 screenB
}

TabNavigator {
 screenC
}
  

我无法使用.push或.dispatch将screenC移至screenA。但是工作   很好地使用.navigate。但是如果我使用.navigate,则screenA为上一个   屏幕不是新屏幕(就像我移到screenB之前一样)。我想从screenC移到新的ScreenA,而不是以前的screenA。

4 个答案:

答案 0 :(得分:3)

尝试

import { NavigationActions, StackActions } from 'react-navigation';
//Reset and navigate
    const resetAction = StackActions.reset({
            index: 0,
            actions: [
              NavigationActions.navigate({ routeName: 'YourScreen' })
            ]
          })
          this.props.navigation.dispatch(resetAction);
//Or Navigate
this.props.navigation.navigate("YourScreen");
//Similar to navigate, push will move you forward to a new route in the stack
this.props.navigation.push(routeName, params, action)

有关更多信息,请参见here

答案 1 :(得分:2)

解决方案

如果使用react-navigation,则可以使用push代替navigate来制作新屏幕。

this.props.navigation.push('ScreenA');

但是在这种情况下,其他屏幕仍保留在堆栈中。

Official Doc

为什么

StackNavigation中,navigate根据屏幕的堆栈进行工作。但是push的工作原理是将特定的屏幕推送到堆栈中,而无需检查重复项。

如果要自定义当前堆栈,则可以使用reset

答案 2 :(得分:1)

尝试一下:
首先导入StackNavigator,然后将所有屏幕导入App.js文件中

import { StackNavigator, SwitchNavigator } from 'react-navigation';

   import ScreenA  from './ScreenA';
   import ScreenB  from './ScreenB';`enter code here`
   import ScreenC  from './ScreenC';

export default class App extends Component { 
render() {
   return (
       <Nav />
   );
 }
const Nav = StackNavigator({
   ScreenA  : { screen: ScreenA },
   ScreenB  : { screen: ScreenB },
   ScreenC  : { screen: ScreenC },
 });

当ScreenA将打开时,请致电

  this.props.navigation.navigate('ScreenB');  // to navigate 

您也可以尝试

  this.props.navigation.push('ScreenB');  to navigate

如果要转到上一个屏幕A,只需致电

 this.props.navigation.goBack()

答案 3 :(得分:0)

最后我找到了答案(但我不确定这是否是最佳实践):

与所有答案相关的

我得到相同的解决方案是使用.push。而且我尝试使用push方法更改导航,但是第一次尝试失败。经过一个小时的尝试,我得到了这样的事实:

 this.props.navigation.push('TabNavigator') //Call the navigator name not screenname when cross two different navigator.
  

如果您知道更好的解决方案,则可以分享您的想法。谢谢