小编bil*_*lal的帖子

Angular 6:setTimeout 函数在我的自定义验证器中不起作用

我正在学习一个教程,以便在 Angular 中执行异步验证。我想要实现的是我的自定义验证器,它shouldBeUnique应该在 2 秒延迟后调用。我在其中使用setTimeout函数,但它不起作用。甚至错误消息未显示在 div 中。

这是我的自定义验证错误文件。

import { AbstractControl, ValidationErrors } from '@angular/forms';

export class UsernameValidator {
   static cannotContainSpace(control: AbstractControl): ValidationErrors | null {
        if ((control.value as string).indexOf(' ') >= 0 ) {
            return { cannotContainSpace: true };
        }
        return null;
    }

    static shouldBeUnique(control: AbstractControl): Promise<ValidationErrors | null> {
        return new Promise((resolve, reject) => {
            setTimeout(() => {
                if (control.value === 'bilal') {
                    resolve({shouldBeUnique: true});
                } else {
                    resolve(null);
                }
            }, 2000);
        });
    } …
Run Code Online (Sandbox Code Playgroud)

javascript typescript angular angular6

4
推荐指数
1
解决办法
975
查看次数

如何在 React/Redux 应用程序中刷新页面后保持登录状态

我正在使用 redux 状态保护路由。我在做什么是当用户的loggedIn我更新Redux的状态isAuthenticatedsignIn组件和接受我的这种状态AllRoutes的组件,然后我在定制的路由传递它ProtectedHomeRoute作为道具。一切正常,但问题是当我刷新时,我得到的isAuthenticatedfalse是它的默认值,因此,ProtectedHomeRoute将我重定向到Login页面。

请建议我在上述用例中处理浏览器刷新的最佳方法

我试图以这种方式解决这个问题,我做了一个名为isLoggedInthis 我正在调用 API 来检查登录状态的新动作,如果响应是那么我在有效负载中传递 true

然后我在componentDidMount生命周期中调用此操作,AllRoutes 以便在浏览器刷新时isLoggedIn将被调用并且无法获得以前的状态,但事情不会以这种方式发生。

这是isLoggedIn行动代码

export function isLoggedIn() {
  axios.get("http://localhost:8080/api/checkLoginStatus").then(res => {
    let data = res.data; 
    let tid = data.data; // data contain userId
    console.log(tid);
    let isAuthenticate =  false
    if(tid){
      isAuthenticate = true;
    }  
    return dispatch => {
      dispatch({
        type: "isLoggedIn",
        payload: isAuthenticate
      });
    }; …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs react-router redux react-redux

1
推荐指数
1
解决办法
4708
查看次数