• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

로그인 안했는데 isPublic에 따라 setMyImages를 하는 이유가 있나요?

21.08.21 11:04 작성 조회수 105

0

client\src\context\ImageContext.js 에서

로그인이 안된 상태에서도 isPublic에 따라 

setMyImages를 하도록 되있는데 

로그인 안한 상태에서는 /images 요청만 날리 개인 사진 보기 버튼이 있지도 않은데 setMyImages는 의미가 없지 않나요?

  useEffect(() => {
    setImageLoading(true)
    axios
      .get(imageUrl)
      // .then((result) => setImages((prevData) => [...prevData, ...result.data]))
      .then((result) =>
        isPublic
          ? setImages((prevData) => [...prevData, ...result.data])
          : setMyImages((prevData) => [...prevData, ...result.data]),
      )
      .catch((err) => {
        console.error(err)
        setImageError(err)
      })
      .finally(() => setImageLoading(false))
  }, [imageUrl, isPublic])

  useEffect(() => {
    if (me) {
      setTimeout(() => {
        axios
          .get('/users/me/images')
          .then((result) => setMyImages(result.data))
          .catch((err) => console.error(err))
      }, 0)
    } else {
      setMyImages([])
      setIsPublic(true)
    }
  }, [me])

답변 1

답변을 작성해보세요.

0

네 그렇게 생각되실 수도 있는데요. 해당 useEffect는 me가 변동될 때 발동 되요. 즉 로그인 하면서 undefined 였던 me가 set되죠. 근데 me가 변경되는 경우가 또 있습니다. 로그아웃 할 때에요. 로그아웃 하면 화면상으로 버튼을 숨겼다고 하더라도 메모리 상으로는 기존에 로그인 했던 유저의 개인 사진 정보들이 그대로 남나 있죠. 그래서 me가 없을 경우에는 해당 데이터를 초기화해주는게 맞아요. 메모리에 남는것도 문제이지만 서비스가 복잡해진다면 버튼 숨김처리와 같은 처리를 여러군데에서 해야될 수도 있는데 이 때 실수로 처리를 안한다면 모두 노출이 되겠죠. 그래서 어떻게 보여질지에 대한 처리도 제대로 해주셔야 하지만 그와 별도로 데이터도 유저 정보/권한에 따라 잘 관리해주셔야 합니다.