// SearchInput.tsx
import React from "react";
const SearchInput = ({ searchText, onSearchChange }) => (
<input
type="text"
placeholder="검색..."
value={searchText}
onChange={onSearchChange}
/>
);
export default SearchInput;
// VideoList.tsx
import React from "react";
const VideoList = ({ videos }) => (
<ul>
{videos.map((video) => (
<li key={video.id}>{video.title}</li>
))}
</ul>
);
export default VideoList;
// App.tsx (메인 컴포넌트)
import React, { useState } from "react";
import SearchInput from "./components/SearchInput";
import VideoList from "./components/VideoList";
const App = () => {
const [searchText, setSearchText] = useState("");
const [videos, setVideos] = useState([]);
return (
<div>
<h1>Video App</h1>
<SearchInput searchText={searchText} onSearchChange={(e) => setSearchText(e.target.value)} />
<VideoList videos={videos} />
</div>
);
};
export default App;
코드 설명
해설:
위 예제에서는 SearchInput
컴포넌트와 VideoList
컴포넌트로 UI를 분리하여, 각각의 역할에 맞는 코드를 독립적으로 관리할 수 있게 함으로써 재사용성과 유지보수를 높였습니다.