inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실전 리액트 프로그래밍

react typescript 환경에서 커스텀 훅을 만들어서 사용하려고 하는데 This expression is not callable 에러가 나타납니다.

1249

김준희

작성한 질문수 2

0

안녕하세요.
 
강의 보고 useState, useEffect 를 활용해보고 싶어서 공공데이터 포털에서 제공해주는 openapi 로 커스텀 훅을 만들어 봤습니다.
 
typescript + webstorm 환경에서 작업중인데요
 
TS2349: This expression is not callable.   No constituent of type 'void | coronaApiPros[]' is callable.
import useDailyCorona: void | coronaApiPros[]
 
App.tsx 6번 라인의 useDailyCorona(); 코드에서 이런 에러가 나타납니다.
 
구글링을 계속 해보는데 원하는 답을 찾을수가 없어서 질문드립니다..ㅠㅠ
 
App.tsx 파일과 커스텀훅 파일인 useDailCorona.tsx 파일을 첨부합니다.
----------- App.tsx ---------
import './App.css';
import React from 'react';
import useDailyCorona from './hooks/useDailyCorona';

function App() {
  const items = useDailyCorona();

  return (
    <ul>
      {items?.map((item, index) => (
        <li key={index}>createDate: {item.createDt}</li>
      ))}
    </ul>
  );
}

export default App;

----------- useDailyCorona.tsx -------------

import {useEffect, useState} from "react";
import {getCorona} from "../corona";

interface coronaApiPros {
  createDt: string // 조회 시작 시간
  deathCnt: number // 사망자 수
  defCnt: number // 확진자 수
  gubun: string // 시도명(한글)
  gubunCn: string // 시도명(중국어)
  gubunEn: string // 시도명(영어)
  incDec: number // 전일대비 증감 수
  isolClearCnt: number // 격리 해제 수
  isolIngCnt: number // 격리중 환자 수
  localOccCnt: number // 지역 발생 수
  overFlowCnt: number // 해외 유입 수
  qurRate: string // 10만명당 발생률
  seq: number // 게시글번호 (국내 시도별 발생 현황 고유값)
  stdDay: string // 기준 일 시
  updateDt: string // 수정 일시 분초
}

function useDailyCorona():void|coronaApiPros[] {
  const [items, setItems] = useState();
  const coronaItems = getCorona();

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

  return items;
}

export default useDailyCorona();

typescript react redux 커스텀훅

답변 2

1

이재승

안녕하세요
따로 쓰는 것과는 상관 없어보이구요, 마지막에 호출을 하셔서 그렇습니다
아래처럼 하시면 될거에요
export default useDailyCorona;

0

김준희

답변 감사합니다!!

0

김준희

자답입니다.

function useDailyCorona 를 export default function useDailyCorona 로 수정하니 에러가 해결됐습니다.
왜 따로 쓰면 에러가 나타날까요?

useDailyCorona.tsx 파일을 수정했습니다.

import {useEffect, useState} from "react";
import {getCorona} from "../corona";

interface coronaApiPros {
  createDt: string // 조회 시작 시간
  deathCnt: number // 사망자 수
  defCnt: number // 확진자 수
  gubun: string // 시도명(한글)
  gubunCn: string // 시도명(중국어)
  gubunEn: string // 시도명(영어)
  incDec: number // 전일대비 증감 수
  isolClearCnt: number // 격리 해제 수
  isolIngCnt: number // 격리중 환자 수
  localOccCnt: number // 지역 발생 수
  overFlowCnt: number // 해외 유입 수
  qurRate: string // 10만명당 발생률
  seq: number // 게시글번호 (국내 시도별 발생 현황 고유값)
  stdDay: string // 기준 일 시
  updateDt: string // 수정 일시 분초
}

export default function useDailyCorona(): coronaApiPros[]|void {
  const [items, setItems] = useState<coronaApiPros[]>();
  const coronaItems = getCorona();

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

  return items;
}

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

0

500

3

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

0

517

2

setValue 함수 질문 있습니다.

0

841

1

찾아야한다 실습 문의

0

470

1

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

0

473

1

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

0

606

1

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

0

253

1

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

1

1082

2

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

0

372

2

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

0

658

1

match

1

497

1

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

0

288

1

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

0

263

1

saga 문제

0

249

1

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

0

390

2

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

0

203

1

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

0

316

1

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

1

1199

1

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

0

338

1

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

0

208

1

useImperativeHandle 질문 입니다.

0

281

1

컴파일 문의드립니다.

0

204

1

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

0

374

1

Context API vs Redux 사용 빈도

0

213

1