Skip to content

React Hook (useHistory) 관련 질문드립니다. #558

Answered by woohm402
hmlinnie asked this question in Q&A
Discussion options

You must be logged in to vote

리액트 공식문서에 훅을 사용할 때에 중요한 몇 가지 규칙이 명시되어 있습니다. (혹시 도움되실까 하여: 수업에서는 이 슬라이드에서 설명했었습니다)

아무튼 저 문서에 따르면 훅을 호출하는 위치는 항상 ***"함수 컴포넌트의 최상위 위치"***여야 합니다. 가령 아래 위치는 옳습니다.

const MyComponent = () => {
  const myHookResponse = useMyHook();
  ...

아래 모든 위치는 옳지 않습니다.

const wrong1 = useMyHook(); // 함수 컴포넌트 안이 아님

const MyComponent = () => {
  for (let i = 0; i < 10; i++) {
    const wrong2 = useMyHook(); // top level이 아님
  ...

질문에 대한 답변을 드리자면, 먼저 올려주신 첫번째 사진에 있는 위치는 옳은 위치입니다. 두번째 사진에 있는 에러 메세지를 해석해 보면, useHistory()를 함수 컴포넌트 밖에서 호출하고 있는 것 같습니다. 첫 번째 사진의 위치처럼 수정해 주시면 해결됩니다.

또한 질문주신 부분과는 관계없지만 HistoryContext라는 걸 만들고 계신 걸로 보이는데, <BrowserRouter />의 하위 컴포넌트기만 하면 컴포넌트 안에서 useHIstory()를 호출해서 history 객체를 불러올 수 있습니다!…

Replies: 4 comments

Comment options

You must be logged in to vote
0 replies
Answer selected by woohm402
Comment options

hmlinnie
Sep 21, 2021
Collaborator Author

You must be logged in to vote
0 replies
Comment options

You must be logged in to vote
0 replies
Comment options

hmlinnie
Sep 22, 2021
Collaborator Author

You must be logged in to vote
0 replies
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Category
Q&A
Labels
React React 관련 내용
2 participants
Converted from issue

This discussion was converted from issue #438 on October 07, 2021 14:41.