如何在 React Native 中的 setState 之前停止执行

Posted

技术标签:

【中文标题】如何在 React Native 中的 setState 之前停止执行【英文标题】:How to stop execution until a setState in React Native 【发布时间】:2019-07-28 02:40:36 【问题描述】:

最近创建了注销功能。当用户单击注销时,将提示他们一个对话框,询问“您确定要注销吗?”。对于 Dialog ,我使用了一个名为 react-native-popup-dialog 的包。

实际上,发生的事情是因为这个应用程序与 redux 结合在一起。我将操作用于注销功能。对于对话框,我使用了组件级状态。

我的对话代码:

<Dialog
    visible=this.state.showDialog
    dialogTitle=
    <DialogTitle 
    title="Confirm Logging Out"
    textStyle= fontSize: 15  
    />
    width=0.8
    footer=
        <DialogFooter>
          <DialogButton
            text="CANCEL"
            textStyle= fontSize: 14 
            onPress=() => 
              this.setState( showDialog: false );
            
          />
          <DialogButton
            text="CONFIRM"
            textStyle= fontSize: 14 
            onPress=() => 
                this.onLogoutPress();
            
          />
        </DialogFooter>
      
    onTouchOutside=() => 
    this.setState( showDialog: false );
    
>
    <DialogContent>
        <Text style= fontSize: 14, top: 10 >Are you sure you want to logout ?</Text>
    </DialogContent>
</Dialog> 

还有我的注销按钮代码:

<TouchableOpacity onPress=()=> this.setState( showDialog: true) >
  <CardItem>
    <Icon name="log-out" style= color: '#03A9F4'  />
    <Body>
      <Text>Logout</Text>
    </Body>
    <Right>
      <Icon name="arrow-forward" />
    </Right>
  </CardItem>
</TouchableOpacity>

所以我的onLogoutPress() 代码:

onLogoutPress() 
this.setState( showDialog: false ,() => 
    this.props.logOut(() => 
        this.props.navigation.dispatch(resetActionToWelcome);
    )
)

我面临的问题是,当我单击确认按钮时,"onLogoutPress()" 会弹出,并且对话框不会关闭,而不是 react 导航的 resetAction 会弹出。由于 setstate 是异步功能,我认为它需要时间才能恢复,其中注销操作会迅速启动,并且应用程序会从启动屏幕启动。但直到对话框保持打开状态。

如何处理?

【问题讨论】:

【参考方案1】:

改变你的功能,如下所示,

希望它对你有用 第一种方法,

onLogoutPress() 
   this.setState( showDialog: false ,() => 
   setTimeout(() => 
     this.props.logOut(() => 
           this.props.navigation.dispatch(resetActionToWelcome);
      )
      , 500);

   )

使用箭头函数的另一种方式,

onLogoutPress = () => 
   this.setState( showDialog: false ,() => 
     this.props.logOut(() => 
           this.props.navigation.dispatch(resetActionToWelcome);
      )
   )

【讨论】:

实际上,它是一种解决方法,对吗?但是面对这个问题的实际方法是什么? 是的,你的方法是对的,但我不知道为什么它不起作用,所以我建议我的方法 setState 是异步函数,它一直等到不使用箭头函数设置状态 找不到你吗? 你第一个正在工作,但我认为这不是一个干净的方法?

以上是关于如何在 React Native 中的 setState 之前停止执行的主要内容,如果未能解决你的问题,请参考以下文章

如何在 React Native 中的组件之间传递数据

如何更改 react-native 中的默认 fontFamily

如何在 React Native 中的 setState 之前停止执行

如何使用给定的 nativeID 识别目标 c 中的视图(在 react-native 中给出)

如何在 react-native 中的 onPress 按钮上滚动顶部?

如何在 react-native 项目中保存 info.plist 中的更改