等待反应导航过渡完成

mar*_*jop 0 react-native react-navigation

我正在寻找一种反应导航的方式来调度导航动作,并等待其完全完成后再触发下一步。

就像是:

await dispatch({
  type: 'Navigation/goBackTo',
  routeName: 'Main',
})
dispatch(anotherAction())
Run Code Online (Sandbox Code Playgroud)

目前,我正在使用setTimeout解决方法。

den*_*emm 6

与react-navigation无关,但仍然有用:react-native 的InteractionManager API。

有一个方法runAfterInteractions()在所有动画完成后将被调用,因此在导航的情况下,我发现它是一种方便的工具。例如,您可以执行以下操作:

class Main extends Component {

    componentDidMount() {
        // 1: Component has been mounted off-screen
        InteractionManager.runAfterInteractions(() => {
            // 2: Component is done animating
            // 3: Do your anotherAction dispatch() here
        }); 
    }
}
Run Code Online (Sandbox Code Playgroud)

  • runAfterInteractions 没有解决我的问题我不知道为什么。当我推动新屏幕时,它会挂起几秒钟,然后显示它。我在反应导航上尝试过 didFocus 事件处理程序。它解决了挂起的问题,但 Ui 仍然需要一些时间才能在屏幕上绘制 (3认同)

dav*_*ler 6

如果您正在使用a,StackNavigator则可以使用transitionEnd事件

React.useEffect(() => {
  const unsubscribe = navigation.addListener('transitionEnd', (e) => {
    // Do something
  });

  return unsubscribe;
}, [navigation]);
Run Code Online (Sandbox Code Playgroud)