Effect callbacks are synchronous to prevent race conditions.

useEffect로 비동기 처리를 실행하고 싶었을 때 화가 나서 메모.

일어난 일



이런 식으로 async 함수를 useEffect의 첫 번째 인수로 설정했습니다.
const getAllBlogs = async () => {
    if (user) {
        blogService.setToken(user.token)
        const blogs = await blogService.getAll()
        setBlogs(blogs)
    }
}
useEffect(getAllBlogs, [user])

다음과 같은 오류가 발생했습니다.


Put the async function inside인 것 같습니다. 정중하게 샘플 코드까지 제시해 줍니다.

수정



useEffect의 첫 번째 인수의 함수 안에 새롭게 fetchBlogs라는 async 함수를 정의해, 그 안에서 await getAllBlogs()로 했습니다.

const getAllBlogs = async () => {
    if (user) {
        blogService.setToken(user.token)
        const blogs = await blogService.getAll()
        setBlogs(blogs)
    }
}
useEffect(() => {
    const fetchBlogs = async () => {
        await getAllBlogs()
    }
    fetchBlogs()
}, [user])


하지만 여전히 오류가 발생했습니다.


fetchBlogs 안에 전부 넣으면 에러는 나오지 않게 되었습니다.

useEffect(() => {
    const fetchBlogs = async () => {
        if (user) {
            blogService.setToken(user.token)
            const blogs = await blogService.getAll()
            setBlogs(blogs)
        }
    }
    fetchBlogs()
}, [user])

좋은 웹페이지 즐겨찾기