인프런 커뮤니티 질문&답변

nova020510님의 프로필 이미지
nova020510

작성한 질문수

Slack 클론 코딩[실시간 채팅 with React]

SWR Devtools 소개

reactQuery로 짜고있는데...

해결된 질문

작성

·

218

1

useQuery 나 mutation같은걸 통해 데이터를 가져오는데 데이터 렌더링이랑 훅스랑겹치지않게 가장 함수끝부분에 배치해야된다해서 그렇게 배치했는데 data 의 null 값여부를 젤 밑에서 하니까 그위에 훅스들은 수동으로 null 값을 체크해야되는데 이런경우는 어떤식으로 하는게 좋을까요?

interface Props {
    children?: React.ReactNode
   
}

const Comp: FC<Props> = () => {
    const {p1, p2} = useParams()

    if (!p1|| !p2) {
        return <>loading error</>;
    }
    const {data} = useQuery({
        queryKey: mykey,
        queryFn: () => myfunc1(userId, codeId)
    });
    const {mutate} = useMutation({
        mutationFn: async (data: CodeRequestEntity) => {
            await myfunc2(data)
            return true

        }
    })
    if(!data){
        return <>loading</>
    }
    const onClickConfirm = useCallback(() => {
        mutate(data)
        onClose()
    }, [])
    return (
        <>
<Button variant={"outlined"} onClick={onClickConfirm}>예
</Button>


        </>
    );
};

export default Comp;

이런식으로 하게되면 분기문을통해 데이터 null 처리를 해서 분기문 밑어부터는 null 처리를 안해도되는데 null 처리를 가장 밑에 렌더링부분에 넣으면 그위에 훅스에선 데이터쓸때마다 null 처리해줘야되서 혹시 다른 방법 있을까요?

답변 1

2

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

지금같이 하시면 hooks 규칙 위반했다는 에러가 뜨게 됩니다(use보다 return이 더 위에 있으면 안 됨). 원래 훅들은 서로 별개의 존재들이라 훅들마다 별도로 체크해주는 게 맞습니다.

nova020510님의 프로필 이미지
nova020510

작성한 질문수

질문하기