如何延迟 Redux Persist Gate 的 SplashScreen?

Qui*_*get 2 react-native redux react-redux redux-persist

我正在使用 Redux 和 Redux-Persist 在应用程序关闭时保留一些用户的数据。

您可以在 PersistGate 中设置一个名为加载的选项,您可以在其中指定一个加载屏幕,该屏幕将在 Redux-Persist 收集持久数据时显示。

问题是这个屏幕出现和消失的速度太快了,我想看几秒钟。

有没有什么形式可以延迟加载画面的过渡? 这是我的代码,应用程序的入口点:

class App extends Component {    

  render() {
    return (
      <Provider store={store}>
        <PersistGate loading={ <SplashScreen />} persistor={persistor}>
          <Routes />
        </PersistGate>
      </Provider>
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

小智 7

不知道这是否完全符合您的需求,但也许您可以使用以下解决方法,使用 onBeforeLift 事件在门升降机之前调用操作以设置具有固定超时的条件渲染。

class App extends Component {    

  state = {
    gateLifted: false
  }
  
  onBeforeLift = () => {
    // Take an action before the gate lifts
    setTimeout(() => { 
      this.setState({ gateLifted: true}) 
    }, 3000);
  }

  render() {
    return (
      <Provider store={store}>
        <PersistGate persistor={persistor} onBeforeLift={this.onBeforeLift}>
          { this.state.gateLifted ? <Routes /> : <SplashScreen />}
        </PersistGate>
      </Provider>
    );
  }
}
Run Code Online (Sandbox Code Playgroud)


小智 6

对于其他想要执行此操作的人,您可以使用以下命令:

class App extends Component {    
  render() {
    return (
      <Provider store={store}>
        <PersistGate
          loading={<SplashScreen />}
          persistor={persistor}
          onBeforeLift={() => new Promise(resolve => setTimeout(resolve, 3000))}
        >
          <Routes />
        </PersistGate>
      </Provider>
    );
  }
}
Run Code Online (Sandbox Code Playgroud)