이번에는 useEffect를 사용해서 api를 불러내는 예제를 작성해 보겠습니다.
DataDisplay라는 컴포넌트를 만들어 줍니다.
import React, { useState, useEffect } from 'react';
function DataDisplay() {
const [searchTerm, setSearchTerm] = useState('');
const [results, setResults] = useState([]);
const handleSearch = async () => {
const response = await fetch(`https://api.conceptnet.io/c/en/${searchTerm}?limit=10`);
const data = await response.json();
setResults(data.edges);
};
useEffect(() => {
if (searchTerm !== '') {
handleSearch();
}
}, [searchTerm]);
return (
<div>
<h1>ConceptNet Example</h1>
<input
type="text"
placeholder="Enter a word or phrase"
value={searchTerm}
onChange={(e) => setSearchTerm(e.target.value)}
/>
<button onClick={handleSearch}>Search</button>
<ul>
{results.map((edge, index) => (
<li key={index}>
{edge.start.label} -{">"} {edge.end.label}
</li>
))}
</ul>
</div>
);
}
export default DataDisplay;
해당코드를 app.js에서 불러들여 실행해보세요.

위 화면처럼 나오면 성공입니다. 해당 api는 단어들의 상관 관계들을 나열하는 api입니다.
코드를 한번 살펴볼까요?
일단 전시간에 배운 useState를 봅시다.
두가지의 data를 관리하네요
검색하는 searchTerm
검색에 따른 api data => results
search 버튼을 누르거나 input box에 단어를 타이핑하면 handleSearch 함수를 실행하여 api data를 불러오고
아래 map 함수를 사용해 list를 작성하는 구조입니다.
중간에 우리가 배울 useEffect가 있네요?
과연 이것은 왜 사용한것일까요?
useEffect란 리액트에서 제공하는 sideEffect라고 생각하시면 됩니다.
부가작용이라는 의미인데요.
일단 여기 실습에서 사용된 이유를 먼저 살펴보자면
searchTerm이라는 state가 변경될때만 useEffect안에 handleSearch 함수를 실행 시키겠다는 의미입니다.
이게 왜 필요할까요?
바로 그 이유는 리액트는 컴포넌트를 렌더링하면 모든 컴포넌트가 렌더링 되기 때문입니다. 굳이 다른 컴포넌트를 사용하는데
api가 불려질 필요는 없죠 때문에 이렇게 useEffect를 사용하여 관리하는 것입니다.
'개발 · IT > 프론트엔드' 카테고리의 다른 글
| React와 TensorFlow.js로 당뇨병 예측 웹앱 만들기: 머신러닝 기반 프로젝트 튜토리얼 (0) | 2023.08.09 |
|---|---|
| 포트폴리오 리뷰: AI 갤러리 프로젝트 - Node.js, MongoDB, EJS 템플릿 엔진을 활용한 웹 개발 (0) | 2023.07.20 |
| 리액트 Props를 알아보자 (0) | 2023.03.21 |
| 웹 포트폴리오 마스터하기: 포트폴리오 개선 방향과 코드 리뷰의 모든 것 (0) | 2023.03.10 |
| 자바스크립트의 JSX 확장 구문과 리액트 컴포넌트에서의 활용 방법 (0) | 2023.02.28 |
댓글