inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

따라하며 배우는 노드, 리액트 시리즈 - 쇼핑몰 사이트 만들기[전체 리뉴얼]

setImage 를 사용했을 때, state에 바로 적용이 안되는 이유는 무엇인가요?

542

bsj

작성한 질문수 3

1

안녕하세요. 쉽고 유익한 강의 감사합니다.

강의를 듣다가 궁금한 점이 있어서 질문드립니다.

<br />

FileUpload.js에서 setImage 를 사용하여 이미지 state에 이미지를 추가 하였을 때, state에 바로 적용이 안되는 이유가 궁금합니다.

<br />

이 질문을 드리는 이유는 FileUpload.js에서 이미지를 업로드 했을 때, 이미지 state에 새로운 이미지를 추가하였는데,

부모 컴포넌트(UploadProductPage.js)에게 그냥 이미지 state만 보내지 않고, 추가된 이미지도 같이 보내는 이유가 궁금했습니다.

<br />

즉,

FileUpload.js의 submitHandler에서 

'''

setImages([...Imagesresponse.data.filePath])

'''

이렇게 해서 이미지 state에 새로 업로드한 이미지를 추가하였으니
부모 컴포넌트에게 state 정보를 보낼 때는
'''
props.refreshFunction([...Images])
'''
이렇게 보내면 될 것 같은데, 이렇게 하지 않고
'''
props.refreshFunction([...Imagesresponse.data.filePath])
'''
이렇게 방금 추가한 이미지도 같이 보내야 되는 이유가 궁금합니다.

react state redux nodejs mongodb 웹앱

답변 1

3

조병우

setState함수가 비동기적으로 작동하고, 동작속도가 느려서 setImage로 image를 set시켜주기 전에 props.refresh~~함수가 동작되버려요.

그래서 그렇게 하신거 같은데 setState로 state변경하고, 바로 그 변경된 state를 쓰고 싶을때는 useEffect를 이용해서 쓰는 방법도 있어요.

그래서 저 같은 경우는

setImages([...imagesresponse.data.filePath]);

dropHandler에서 이렇게 Image의 state를 변경시켜주고,

useEffect(() => {
        props.refreshFunction(images);
    }, [images])

이렇게 image의 state가 변경되는 걸 catch하게 해서 보냈습니다.

근데 이렇게 하면 image가 set되고 => useEffect에서 감지 => props의 function호출인데

강사님이 해주신 방법대로하면 set호출 => props의 function호출 => set완료 라 더 빠릅니다.

다만, 하다보니 useEffect로 해야하는 경우가 반드시 생겨서 방법은 알고 계시는게 좋을듯해요

0

bsj

답변 감사합니다! 

동기화 문제 때문이군요. 궁금했던게 해소되었습니다.

useEffect 를 이용해서 state를 업데이트 하는 방법도 유용하게 잘 사용하겠습니다.

감사합니다!

강의 내용은 훌륭하나, 환경 설정 오류 때문에 진도를 나갈 수 없습니다. 20년 버전 강의.

0

60

1

강의자료는 어디서 볼 수있나요??

0

66

1

이 쇼핑몰 만들기 강의는 관리자페이지 만드는건 없나요

0

113

2

웹에서 실시간 코드반영이 안돼요

0

120

1

app.use질문

0

64

1

강사님께 어떻게 직접질문할수있어요??

0

75

1

const함수같은거 기초강의는 어디있나요

0

81

2

리덕스 참조챕터가 어딨어요? 미리듣고오라는데요

0

81

2

강의가완전 오래되서 다 틀리네 app.jsx도 tailwind css 다틀림 무책임함

0

68

1

개발자도구에 redux란이 없어요

0

87

1

npx tailwindcss init -p 에서 계속 에러나요

0

92

1

쇼핑몰기능중 찜하기 기능은 어떻게 구현하나요

0

138

2

강의하다 줌으로 설명가능한지좀 정확히 알려주세요. 이 선생님 정책이 어떻게 되는데요. 직접 연락할 메일이라도 알려주세요

0

42

1

도표 강의 자료 열람 불가능

0

109

1

tailwindcss를 vite에서 이용하는 방식이 바뀐것 같습니다.

0

1130

2

eslint 설정 후 오류가 납니다.

0

221

1

오버로드 오류

0

149

1

VSCode에서 save를 할 때, landingpage의 useEffect가 실행되는 문제에 대하여

0

169

1

dispatch(logoutUser()) 실행시 dispatch(authuser())도 함께 실행되는 문제

0

228

2

logout할 때, server로 요청을 보내서 authUser middleware를 통과하도록 하는 이유?

0

195

1

webkit-text-size-adjust 오류

0

312

1

does not provide an export named 'userReducer'

0

213

2

빌드 배포

0

138

1

삭제 예정 강의는 언제 삭제 되나요? 저것때문에 수강완료를 못하면 회사에서 비용을 청구한다고 합니다~

0

217

2