javascript - 如何停止直到 setstate 在 React Native 中执行?

标签 javascript reactjs react-native

我正在创建注销功能。当用户单击注销按钮时,系统将提示他们一个对话框,询问“您确定要注销吗?”。对于 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 是异步函数,我认为需要一些时间才能返回,其中注销操作会启动并且应用程序从启动屏幕启动。但直到对话框保持打开状态。

如何处理这个问题?

最佳答案

您可以使用setState的第二个参数

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

关于javascript - 如何停止直到 setstate 在 React Native 中执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54820272/

相关文章:

javascript - 在 JSX 中使用 For 循环

javascript - 带有样式组件的 react-native box-shadow

react-native - 如何使用 react-native 创建侧边菜单?

javascript - 如何使用正则表达式/Javascript 组织数字

javascript - 数组已排序,但 React 未按排序顺序渲染

javascript - AngularGrid 库在某些特殊情况下会产生空白

javascript - 使用 React hooks 从另一个页面使用 useEffect 更新状态

Typescript:React Native useRef 给出错误 "Object is possibly null"

javascript - 使用鼠标选择表中包含数字的 Div 并求和

javascript - 使用 JavaScript 修改时恢复默认样式