2016-07-06 1 views
0

기본적으로, 나는 그들이 내 정규식을 통과하는지 확인하여 양식 필드의 유효성을 검사하고있다면, 나는 '성공'또는 '오류'로 상태를 설정합니다. (반응 부트 스트랩에 의해 사용됨).reactjs - 상태를 업데이트하고 약속을 사용하여 내 기능에 몇 가지 문제가

기본적으로 실행해야하는 약 6 개의 함수가 있지만 암호 필드 유효성 검사 함수는 많은 문제를 일으 킵니다. ,

handleSubmit() { 
    this.validate1(); 
    this.validate2(); 
    // ... 
    this.validatePassword(); 
    this.validateConfirmPassword(); 
} 

그러나, 문제가 validatePassword()가 '성공'또는 '오류'중 하나를 setState를하며, 기능부터 순서대로 떨어져 발사하지 않는 것입니다 - 순간에

handleSubmit()이 같이 보입니다 나는 보통 validateConfirmPassword()에 대한 잘못된 결과를 얻습니다.

나는 Promises에서 mozilla 페이지를 읽었지 만, 정말 혼란스럽고 코드에 어떻게 적용하는지 잘 모르겠습니다.

내가 Promise.all([everything_except_validateConfirmPassword]).then(validateConfirmPassword())처럼 뭔가를 할 수 있지만 잘 보이지 않는다 ..

validatePassword(pass) { 
    if (pass.length >= 8) { 
     if (checkPass.test(pass)) { 
     this.setState({ 
      passValidation: validation.success 
     }); 
     } else { 
     this.setState({ 
      passValidation: validation.error 
     }); 
     } 
    } else { 
     this.setState({ 
     passValidation: validation.error 
     }); 
    } 
    } 

validateConfirmPassword(pass, confirmPass) { 
    const matches = pass === confirmPass; 
    if (matches && this.state.passValidation === validation.success) { 
     this.setState({ 
     confirmPassValidation: validation.success 
     }); 
    } else { 
     this.setState({ 
     confirmPassValidation: validation.error 
     }); 
    } 
    } 
+0

비동기 이러한 기능 중 하나가 있습니까 ? –

+0

안녕하세요. 예 - 지금 당장은,하지만'validatePassword()'후에'validateConfirmPassword()'를 실행하는 방법을 궁금합니다 – user3152131

+0

... 정말입니까? 일부 정규 표현식에 대해 문자열을 검사하는 것은 비동기 적이 지 않습니다. 서버와 대화하고 응답을 기다리지 않는 한, Promises는 필요하지 않습니다. –

답변

-1

당신은이 방법의 componentDidUpdate 반응 사용하여이 문제를 해결 할 수 있습니다

componentDidUpdate() { 
    if (this.state.canCheckConfirmPwd) { 
    this.validateConfirmPassword(); 
    } 
} 

validatePassword(pass) { 
if (pass.length >= 8) { 
    if (checkPass.test(pass)) { 
    this.setState({ 
     passValidation: validation.success, 
     canCheckConfirmPwd: true, // on next update we'll trigger validateConfirmPassword() 
    }); 
    } else { 
    this.setState({ 
     passValidation: validation.error 
    }); 
    } 
} else { 
    this.setState({ 
    passValidation: validation.error 
    }); 
    } 
} 

validateConfirmPassword(pass, confirmPass) { 
    const matches = pass === confirmPass; 
    if (matches && this.state.passValidation === validation.success) { 
     this.setState({ 
     confirmPassValidation: validation.success, 
     canCheckConfirmPwd: false, // to avoid retriggering the function on next update 
     }); 
    } else { 
     this.setState({ 
     confirmPassValidation: validation.error, 
     canCheckConfirmPwd: false, 
     }); 
    } 
    } 
+0

감사합니다. 불행히도 나는 코드 오류가 있었고 100 % 실수였다. (미안. – user3152131

+0

이 답변은 OP의 과도한 상태 사용을 자신의 구성 요소에 다시 적용합니다. 이상적으로 상태를 가능한 한 최소화해야합니다. [[ 이 기사를] (http://reactkungfu.com/2015/09/common-react-dot-js-mistakes-unneeded-state/) 이유를 이해하는 데 도움이. –

+0

무엇이 더 나은 방법이 될 것이라고? 제안에 대한 열정! :) – user3152131

관련 문제