일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 자바스크립트
- react hook
- useEffect
- react firebase
- 프로그래머스 자바
- 자바 공부
- codesandbox
- useState
- 코딩테스트 고득점 Kit
- 코틀린
- react
- 리액트 훅
- design pattern
- React JS
- 코딩테스트 고득점 Kit 완전탐색
- vanillaJS
- 프로그래머스
- 프로그래밍 언어론
- websocket
- 프로그래머스 완전탐색
- NextJS
- 장고
- JavaScript
- Java
- 백준
- 디자인 패턴
- 자바
- 컴퓨터 네트워크
- 데이터모델링과마이닝
- 리액트
Archives
- Today
- Total
기록하는 개발자
[React] React Hook-1.2 useState를 활용한 useTabs 본문
728x90
< useState를 활용한 useTabs >
import React, { useState } from "react";
import ReactDOM from "react-dom";
import "./styles.css";
const content = [
{
tab: "Romnace and Musical",
content: "I think you like SingStreet, LaLaLand, The Greatest Show!"
},
{
tab: "Fantasy",
content: "Avengers, Harry Potter, The Lord of the Rings!"
}
];
const useTabs = (initialTab, tabArray) => {
if (!tabArray || !Array.isArray(tabArray)) return;
const [currentIndex, setCurrentIndex] = useState(initialTab);
return {
currentItem: tabArray[currentIndex],
changeItem: setCurrentIndex
};
};
export default function App() {
const { currentItem, changeItem } = useTabs(0, content);
return (
<div className="App">
<h1>Which genre do you prefer more?</h1>
{content.map((genreTab, genreIndex) => (
<button onClick={() => changeItem(genreIndex)}>{genreTab.tab}</button>
))}
<div>{currentItem.content}</div>
</div>
);
}
< 배열 생성 >
import React, { useState } from "react";
import ReactDOM from "react-dom";
import "./styles.css";
const content = [
{
tab: "Romnace and Musical",
content: "I think you like SingStreet, LaLaLand, The Greatest Show!"
},
{
tab: "Fantasy",
content: "Avengers, Harry Potter, The Lord of the Rings!"
}
];
- tab과 content 요소를 가진 배열 content를 생성한다.
< useTabs >
const useTabs = (initialTab, tabArray) => {
if (!tabArray || !Array.isArray(tabArray)) return;
const [currentIndex, setCurrentIndex] = useState(initialTab);
return {
currentItem: tabArray[currentIndex],
changeItem: setCurrentIndex
};
};
- content가 담긴 배열(tabArray)이 전달되지 않았거나 전달된 tabArray가 배열이 아닌 경우 return을 통해 함수를 종료한다.
- useState를 initialTab로 초기화한다.
→ currentIndex가 initialTab으로 초기화된다.
- content배열의 currentIndex번 째 요소와 setCurrentIndex 함수를 각각 setCurrentIndex, changeItem의 이름으로 return 한다.
< App() >
export default function App() {
const { currentItem, changeItem } = useTabs(0, content);
return (
<div className="App">
<h1>Which genre do you prefer more?</h1>
{content.map((genreTab, genreIndex) => (
<button onClick={() => changeItem(genreIndex)}>{genreTab.tab}</button>
))}
<div>{currentItem.content}</div>
</div>
);
}
1.
const { currentItem, changeItem } = useTabs(0, content);
- useTabs 함수의 return 값을 가져온다.(currentItem와 changeItem이름 그대로 가져와야함)
- initialTab으로 0번 째 index 값을 넘겨준다.
2.
{content.map((genreTab, genreIndex) => (
<button onClick={() => changeItem(genreIndex)}>{genreTab.tab}</button>
))}
- tab과 content가 들어있는 content를 map으로 순회하며 각 content의 요소와 index를 각각 genreTab와 genreIndex로 간주한다.
- button이 click되면 해당 genreTab의 genreIndex 이용해 현재 index를 변경한다.
3.
<div>{currentItem.content}</div>
- currentItem의 content 보여주기
< 초기 화면 → 0번 째 index의 content를 보여준다. >
< 두 번째 button을 선택한 화면 >
728x90
'Web > React' 카테고리의 다른 글
[React] React Hook-2.1 useEffect를 활용한 useTitle (0) | 2021.09.30 |
---|---|
[React] React Hook-2.0 useEffect (0) | 2021.09.30 |
[React] React Hook-1.1 useState를 활용한 useInput (0) | 2021.09.29 |
[React] React Hook-1.0 useState (0) | 2021.09.29 |
[React] Movie Rating Web Service-2.0. Detail page, About page 만들기 (0) | 2021.09.25 |