[React] response할 때 주의사항
2023. 7. 21. 12:38ㆍReact
다음과 같이 response 값을 set(useState)을 이용해서 하게 되면 submit을 두 번해야하는 문제가 발생한다. 추측건대 아마 setResult가 다 실행되기 전에 if (result) 문이 실행되기 때문이다. axios.post는 비동기이기 때문에 setResult도 비동기로 처리가 되기 때문이다.
axios.post( "http://localhost:8000/signup/id_validation", body ).then( ( res ) => {
console.log( res.data )
setResult( res.data )
} ).catch( error => {
// 요청 중 에러가 발생했을 때 처리
console.error( error );
} );
if ( result ) {
if ( result.type ) {
let path = '/auth/signup/password';
navigate( path, { state: { userName: id } } );
}
else {
console.log( result.message )
}
}
따라서 다음과 같이 axios post 안에서 처리되도록 한다.
axios.post( "http://localhost:8000/signup/id_validation", body ).then( ( res ) => {
console.log( res.data )
const result = res.data
if ( result.type ) {
let path = '/auth/signup/password';
navigate( path, { state: { userName: id } } );
}
else {
console.log( result.message )
}
} ).catch( error => {
// 요청 중 에러가 발생했을 때 처리
console.error( error );
} );
이렇게 하면 될 거 같은데 안된다.
axios.post( "http://localhost:8000/signup/id_validation", body ).then( ( res ) => {
console.log( res.data )
// const result = res.data
setResult( res.data )
if ( result.type ) {
let path = '/auth/signup/password';
navigate( path, { state: { userName: id } } );
}
else {
console.log( result.message )
}
} ).catch( error => {
// 요청 중 에러가 발생했을 때 처리
console.error( error );
} );
그 이유는 setResult가 실행되면 리렌더링 시점에서 값이 바뀌게 된다. 따라서 그 이후 라인들은 업데이트가 되기 전의 값으로 작동이 되는 것이다.
'React' 카테고리의 다른 글
[React] axios 요청을 성공할 때까지 보내야 할 때 (0) | 2023.07.22 |
---|---|
[React] Error: ENOSPC: System limit for number of file watchers reached (watchers 에러 뜰때) (0) | 2023.07.22 |
[React] 환경 세팅 (0) | 2023.07.20 |
[React] 페이지 간 이동 (0) | 2023.07.19 |
[React] 다크 모드가 어디서 설정되는지 모르겠을때 (0) | 2023.07.17 |