inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실전 리액트 프로그래밍

커스텀훅 작성할 때 axios 부분을 별도의 파일로 만들어서 호출 할 경우 type error 가 나타납니다.

514

김준희

작성한 질문수 2

0

안녕하세요.

typescript 와 create-react-app 을 사용하여 공부중인데요.

커스텀 훅을 만들어서 비동기 API를 호출하여 테이블에 노출하는 기능을 구현하다가 도저히 답이 안나와서 질문드립니다.

useState와 useEffect 를 사용하여 비동기 API를 set 하는 커스텀훅을 만들었고,

axios 를 호출하는 별도의 파일을 만들어서 사용중인데

const [items, setItems] = useState<coronaApiProps[]>();

const coronaItems = getCorona();
useEffect(() => {
setItems(coronaItems);
}, []);

이렇게 사용하니 아래처럼 에러가 나타납니다.

TS2345: Argument of type 'Promise<coronaApiProps[]>' is not assignable to parameter of type 'SetStateAction<coronaApiProps[] | undefined>'.   Type 'Promise<coronaApiProps[]>' is not assignable to type '(prevState: coronaApiProps[] | undefined) => coronaApiProps[] | undefined'.     Type 'Promise<coronaApiProps[]>' provides no match for the signature '(prevState: coronaApiProps[] | undefined): coronaApiProps[] | undefined'.

coronaApiProps 는 제가 만든 인터페이스입니다.

해당 에러가 나타나서 useEffect 안에

const [items, setItems] = useState<coronaApiProps[]>();

// axios 로 api 호출
const coronaItems = getCorona();

useEffect
(() => {
coronaItems.then(response => {
setItems(response);
});
}, []);

이렇게 사용하니 커스텀훅을 두번 호출합니다.

그래서 axios 파일을 분리하지 않고 커스텀훅 안에 사용하면 커스텀훅을 한번만 사용합니다.

 

api를 호출하는 axios 파일을 분리하고 사용할 수 없나요?

필요하면 github 추가해드릴 수 있습니다.

typescript react redux axios

답변 1

0

이재승

안녕하세요
처음에 보여주신 getCorona 를 useEffect 바깥에서 호출하는 방식은 getCorona 반환값이 promise 이므로 에러가 나는 것이 명확합니다

마지막에 보여주신 코드를 `getCorona().then( ...` 으로 변경하면 문제가 해결될 것 같습니다

자동완성기능이 안되네요 ..

0

532

3

화면에 에러가나네요 ...

0

538

2

setValue 함수 질문 있습니다.

0

855

1

찾아야한다 실습 문의

0

484

1

훅 기초 익히기 - 배치 처리와 순차적 처리의 차이

0

492

1

cra, next.js 관련 질문 드립니다!

0

613

1

useState 배열 비구조화 문법 질문!

0

260

1

Uncaught TypeError: Failed to execute 'removeChild' on 'Node': parameter 1 is not of type 'Node'

1

1091

2

Saga 오류 이거 혹시 왜이런지 알수 있을까요?

0

379

2

http://localhost:3001/user/search?keyword=u 이걸로 데이터를 보는데 저는 사이트에 연결할 수 없다고 나오네요

0

680

1

match

1

499

1

버튼이 생성되지 않습니다 .

0

288

1

혹시 import 옆에 파일 사이즈 표시 어떻게 하나요?

0

263

1

saga 문제

0

250

1

에러가 발생하는데 이유가뭘까요..?

0

396

2

선생님과 똑같이 했는데 다 rendering 됩니다.

0

209

1

컴포넌트와 컨테이너의 기준

0

322

1

커스텀훅의 개념과 함수차이

1

1204

1

useEffect 실전 활용법(1) 강의에서 질문있습니다.

0

344

1

리덕스, 사가파일들의 관리

0

212

1

useImperativeHandle 질문 입니다.

0

286

1

컴파일 문의드립니다.

0

211

1

React.memo 관련 질문이 있습니다.

0

380

1

Context API vs Redux 사용 빈도

0

218

1