我是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。
答案 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');
但是在这种情况下,其他屏幕仍保留在堆栈中。
在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.
如果您知道更好的解决方案,则可以分享您的想法。谢谢