React native 使用Redux响应本机导航

React native 使用Redux响应本机导航,react-native,redux,React Native,Redux,我在React native和Redux方面是新手。我计划使用导航器组件进行导航。例如,有一个按钮。按下时,应用程序将导航到另一个视图。我想知道我是应该直接在onPress中调用push,还是应该先调用dispatch,然后根据状态调用push p.S. 例如,我有3个组件。一个是容器(LaunchContainer): 导出默认类LaunchContainer扩展组件{ renderScene(路线、导航器){ 返回 } render(){ 常量初始屏幕=前屏幕 返回( ) } } 常量屏幕选

我在React native和Redux方面是新手。我计划使用导航器组件进行导航。例如,有一个按钮。按下时,应用程序将导航到另一个视图。我想知道我是应该直接在onPress中调用push,还是应该先调用dispatch,然后根据状态调用push

p.S.

例如,我有3个组件。一个是容器(LaunchContainer):

导出默认类LaunchContainer扩展组件{
renderScene(路线、导航器){
返回
}
render(){
常量初始屏幕=前屏幕
返回(
)
}
}
常量屏幕选择器=(存储)=>{
返回{
inLoginScreen:store.launch.isInLoginScreen
}
}
module.exports=连接(屏幕选择器)(启动容器)
容器内的初始屏幕为FrontScreen

export default class LaunchContainer extends Component {
  renderScene(route,navigator) {
    return <route.component {...route.passProps}
      title={route.name} navigator={navigator} />
  }

  render() {
    const initialScreen = FrontScreen
    return (
      <Navigator style={{flex:1}}
        initialRoute={{name:'Launch',component:initialScreen}}
        renderScene={this.renderScene} />)
  }
}
const screenSelector = (store) => {  
  return {
    inLoginScreen: store.launch.isInLoginScreen
  }
}

module.exports = connect(screenSelector)(LaunchContainer)
export default class FrontScreen extends Component {

  render() {
    return (
      <View style={styles.container}>
          <TouchableHighlight onPress={()=> this.props.dispatch(switchToLogin())}>
            <Text style={styles.btnText}>LOG IN</Text>
          </TouchableHighlight>
      </View>
    )
  }
}
导出默认类FrontScreen扩展组件{
render(){
返回(
this.props.dispatch(switchToLogin())}>
登录
)
}
}
单击登录按钮后,我想通过启动屏幕启动登录屏幕。如您所见,当用户单击登录按钮时,将发送一个操作,然后reducer将调用selectScreen函数


我的问题是如何以及何时推送登录组件?

您可以在组件中调度操作。例如,您可以使用sagas来侦听存储中的特定操作,然后执行基于承诺的(异步)操作

function* saga_example() {
   yield take('CHANGE_TO_HOME_SCENE')
   yield put({ type: 'SHOW_WAITING_MODAL' })
   const response = yield call(expensiveFunction)
   yield put({ type: 'EXPENSIVE_RESULT', response.data})
   yield put({ type: 'HIDE_WAITING_MODAL' })
}