-
Beta Was this translation helpful? Give feedback.
Replies: 4 comments
-
리액트 공식문서에 훅을 사용할 때에 중요한 몇 가지 규칙이 명시되어 있습니다. (혹시 도움되실까 하여: 수업에서는 이 슬라이드에서 설명했었습니다) 아무튼 저 문서에 따르면 훅을 호출하는 위치는 항상 ***"함수 컴포넌트의 최상위 위치"***여야 합니다. 가령 아래 위치는 옳습니다. const MyComponent = () => {
const myHookResponse = useMyHook();
... 아래 모든 위치는 옳지 않습니다. const wrong1 = useMyHook(); // 함수 컴포넌트 안이 아님
const MyComponent = () => {
for (let i = 0; i < 10; i++) {
const wrong2 = useMyHook(); // top level이 아님
... 질문에 대한 답변을 드리자면, 먼저 올려주신 첫번째 사진에 있는 위치는 옳은 위치입니다. 두번째 사진에 있는 에러 메세지를 해석해 보면, 또한 질문주신 부분과는 관계없지만 |
Beta Was this translation helpful? Give feedback.
-
안녕하세요! 또, |
Beta Was this translation helpful? Give feedback.
-
아래 코드블럭을 보면 (일반적인 리액트 컴포넌트 코드죠) // App.js
import React from 'react';
// 1번 위치
const App = () => {
const [state,] = useState();
// 2번 위치
return (
<h1>hello</h1>
);
};
export default App; 잘 보면 올려주신 두번째 사진을 보면 App.js 11번 줄에서 useHistory를 호출하고 있는 걸로 보이는데, 위치를 잘 보면 컴포넌트 밖의 위치입니다. 그 부분을 짚어 드린 거예요! 해결되셨을까요?
해당 오류는 useHistory를 호출하신 곳이 BrowserRouter 하위 컴포넌트가 아니어서 발생했을 것 같습니다! |
Beta Was this translation helpful? Give feedback.
-
네! 해결되었습니다. |
Beta Was this translation helpful? Give feedback.
리액트 공식문서에 훅을 사용할 때에 중요한 몇 가지 규칙이 명시되어 있습니다. (혹시 도움되실까 하여: 수업에서는 이 슬라이드에서 설명했었습니다)
아무튼 저 문서에 따르면 훅을 호출하는 위치는 항상 ***"함수 컴포넌트의 최상위 위치"***여야 합니다. 가령 아래 위치는 옳습니다.
아래 모든 위치는 옳지 않습니다.
질문에 대한 답변을 드리자면, 먼저 올려주신 첫번째 사진에 있는 위치는 옳은 위치입니다. 두번째 사진에 있는 에러 메세지를 해석해 보면,
useHistory()
를 함수 컴포넌트 밖에서 호출하고 있는 것 같습니다. 첫 번째 사진의 위치처럼 수정해 주시면 해결됩니다.또한 질문주신 부분과는 관계없지만
HistoryContext
라는 걸 만들고 계신 걸로 보이는데,<BrowserRouter />
의 하위 컴포넌트기만 하면 컴포넌트 안에서useHIstory()
를 호출해서history
객체를 불러올 수 있습니다!…