๋ถ๋ชจ์ปดํฌ๋ํธ์์ ์์์ปดํฌ๋ํธ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๋๊ฑด ์ฝ๊ฒ ๊ฐ๋ฅํ๋ฐ
์ญ์ผ๋ก ๋ณด๋ด๋ ๊ฑด ์ข ํท๊ฐ๋ ค์ ํ์คํ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ์ ์ด๋๋๋ค.!
์ผ๋จ ์๋ฅผ ๋ค์ด, ๊ฒ์์ด๋ฅผ ์ ๋ ฅํ๋ ๋ฐ์ค๋ฅผ ํฌํจํ๋ ์ปจํ ์ธ ํ์ด์ง๊ฐ ์๋ค๋ฉด
๊ฒ์์ด๋ฅผ ์ ๋ ฅํ ๋ค ๋ฒํผ์ ๋๋ฌ ๊ฒ์์ด๋ค์ ๋ํ ์ ๋ณด๋ฅผ ๋๊ฒจ ์ปจํ ์ธ ํ์ด์ง์์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์๋ด์ผํ ๊ฒ์ด๋ค.
ContentPage.tsx
import React, { useState } from "react";
import SearchBox from "./SearchBox";
const ContentPage: React.FC = () => {
const [searchResults, setSearchResults] = useState([]);
const [selectedOption, setSelectedOption] = useState<string>("option1");
const [searchText, setSearchText] = useState("");
const handleSearch = (selectedOption: string, searchText: string) => {
// ์ ํ๋ ์ต์
๊ณผ ๊ฒ์์ด๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ด
const results = [
...
];
setSearchResults(results);
setSelectedOption(selectedOption);
setSearchText(searchText);
};
return (
<div>
<SearchBox
searchText={searchText}
setSearchText={setSearchText}
selectedOption={selectedOption}
setSelectedOption={setSelectedOption}
onSearch={handleSearch}
/>
<div>
<h2>Search Results for:</h2>
<p>Selected Option: {selectedOption}</p>
<p>Search Text: {searchText}</p>
<ul>
// ๊ฒ์ ๊ฒฐ๊ณผ ๋ชฉ๋ก ๋ณด์ฌ์ฃผ๋ ๊ณณ (results)
</ul>
</div>
</div>
);
};
export default ContentPage;
๋ฉ์ธ ํ์ด์ง์์๋ useState๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋ ์ต์ ๊ณผ ๊ฒ์์ด๋ฅผ ์ํ๋ก ์ ์ฅํ๊ณ , ์ด๋ฌํ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์จ๋ค.
SearchBox.tsx
import React, { useState } from "react";
interface SearchBoxProps {
setSelectedOption: any;
setSearchText: any;
selectedOption: string;
searchText: string;
onSearch: (selectedOption: string, searchText: string) => void;
}
const SearchBox: React.FC<SearchBoxProps> = ({
setSelectedOption,
selectedOption,
setSearchText,
searchText,
onSearch
}) => {
const handleSearch = () => {
onSearch(selectedOption, searchText);
};
return (
<div>
<select
value={selectedOption}
onChange={(e: any) => setSelectedOption(e.target.value)}
>
<option value="option1">Option 1</option>
<option value="option2">Option 2</option>
</select>
<input
type="text"
value={searchText}
onChange={(e) => setSearchText(e.target.value)}
/>
<button onClick={handleSearch}>Search</button>
</div>
);
};
export default SearchBox;
์ํผ ์์์ ๋ณด๋ธ ๊ฒ์ ํด๋น ์ปดํฌ๋ํธ์ ์ ๋ฐ์์ฃผ๊ณ , ์ฌ๊ธฐ์ ๊ฒ์ํ๋ ํจ์์์ ๊ฒ์๊ฐ๋ค์ ๋ฐ์์ค๋ค.
๊ทธ๋์ ๋ฒํผ ํด๋ฆญ์ ContentPage์์ ๋ด๋ ค๋ฐ์ ํจ์์ ๋ฃ์ด์ฃผ์ด ๋ถ๋ชจ์ปดํฌ๋ํธ๋ก ๊ฐ์ ๋ณด๋ด์ฃผ๋ ๊ฒ์ด๋ค.
state๋ฅผ ์ด ์ปดํฌ๋ํธ์์ ๋ฐ๋ก ์ฌ์ฉํ ์๋ ์๋๋ฐ ๊ทธ๋ฌ๋ฉด SearchBox ์ปดํฌ๋ํธ ๋ด์์ ๋ ๋ฆฝ์ ์ผ๋ก ์ํ๋ฅผ ๊ด๋ฆฌํ์ฌ
์ปดํฌ๋ํธ๋ค๋ง๋ค ๋ ๋ฆฝ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ๋ ์ฉ์ดํ ์๋~ ์์ผ๋.. ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ ์๋๋ผ๊ตฌํจ
๊ทธ๋ฆฌ๊ณ ๊ฒ์ ๋ฒํผ์ ํด๋ฆญํ ๋ ์ ๋ฐ์ดํธ๊ฐ ๋ฐ์ํ๊ฒ ๋์ด ์ค์๊ฐ์ผ๋ก ๊ฐ onChangeํจ์๊ฐ ๋ฐ์์ด ๋์ง ์๋๋ค.
'TIL > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL] useRef (0) | 2023.05.19 |
---|---|
[TIL] default props (0) | 2023.05.19 |
[TIL] useReducer (0) | 2023.05.19 |
[TIL] useLocation() (0) | 2023.05.18 |