1-12 Counter 만들기
버튼을 클릭할때마다 1씩 증가하거나 감소하는 counter 만들기
// state를 사용할 것이기 때문에 { useState }를 삽입
import React, { useState } from "react";
const App = () => {
// state 사용 구문 기본값음 숫자 0으로 지정
const [number, setNumber] = useState(0);
return (
<div>
{number}
<button
// 1회성으로 사용되는 기능이기때문에 handler가 아닌 익명함수를 사용.
// () => { setNumber(number + 1); }
onClick={() => {
setNumber(number + 1);
}}>
증가
</button>
<button
onClick={() => {
setNumber(number - 1);
}}
>
감소
</button>
</div>
);
};
export default App;
1-13 컴포넌트 꾸미기
import React from "react";
const App = () => {
const style = {
padding: "100px",
display: "flex",
gap: "12px",
};
const squareStyle = {
width: "100px",
height: "100px",
border: "1px solid green",
borderRadius: "10px",
display: "flex",
alignItems: "center",
justifyContent: "center",
};
return (
<div style={style}>
<div style={squareStyle}>감자</div>
<div style={squareStyle}>고구마</div>
<div style={squareStyle}>오이</div>
<div style={squareStyle}>가지</div>
<div style={squareStyle}>옥수수</div>
</div>
);
};
export default App;
css 기초 더보기
https://developer.mozilla.org/en-US/docs/Learn/Getting_started_with_the_web/CSS_basics
CSS basics - Learn web development | MDN
CSS (Cascading Style Sheets) is the code that styles web content. CSS basics walks through what you need to get started. We'll answer questions like: How do I make text red? How do I make content display at a certain location in the (webpage) layout? How d
developer.mozilla.org
개발자도구 이용해 보기
- "검사"의 마우스를 클릭하고 이와 같이 스타일을 확인하면서 여러 경우를 시험해 볼 수 있다.

1-14 반복되는 컴포넌트 처리하기
import React, { useState } from "react";
import "./App.css"; // 🔥 반드시 App.css 파일을 import 해줘야 합니다.
function CustomButton(props) {
/*CustomButton 을 통해 버튼의 style을 효율적으로 관리할 수 있다.*/
const { color, onClick, children } = props;
// color값이 있다면 이렇게 받아온다.
if (color) {
return (
// 여기서 children은 뭐지?
<button
style={{ backgroundColor: color, color: "white" }}
onClick={onClick}
>
{children}
</button>
);
}
return <button onClick={props.onClick}>{props.children}</button>;
}
function User(props) {
return (
<div className="square-style">
{props.user.age}살 - {props.user.name}
<CustomButton
color="red"
onClick={() => {
props.handleDelete(props.user.id);
}}
>
삭제하기
</CustomButton>
</div>
);
}
const App = () => {
// 데이터의 배열을 만들어준다.
// state를 사용하기 위해 setUsers와 useState를 넣어준다.
const [users, setUsers] = useState([
{ id: 1, age: 30, name: "송중기" },
{ id: 2, age: 24, name: "송강" },
{ id: 3, age: 21, name: "김유정" },
{ id: 4, age: 29, name: "구교환" },
]);
// 이곳은 name과 age를 입력받았을때 state값을 받아올 함수
const [name, setName] = useState("");
const [age, setAge] = useState("");
// user를 추가해주었을때 값을 받아올 event handler 생성
const addUserHandler = () => {
const newUser = {
// user의 길이에 1을 추가한다. 배열 내에 4개의 요소가 있는경우 5번째를 추가한다.
id: users.length + 1,
age: age,
name: name,
};
// 전개연산자에 newUser를 추가해준다.
setUsers([...users, newUser]);
};
// 삭제기능을 위한 event handler
const deleteUserHandler = (id) => {
// user.id가 id와 같지 않다면 새로운 배열을 생성해준다?
const newUserList = users.filter((user) => user.id !== id);
// 새로운 배열 newUserList을 생성해준다.
setUsers(newUserList);
};
return (
// map함수를 통해 배열값을 불러온다.
<div>
<div className="app-style">
{users.map((user) => {
if (user.age < 25) {
return (
<User
handleDelete={deleteUserHandler}
user={user}
key={user.id}
></User>
);
} else {
return null;
}
})}
</div>
<input
value={name}
placeholder="이름을 입력해주세요"
// 인풋 이벤트로 들어온 입력 값을 name의 값으로 업데이트
onChange={(e) => setName(e.target.value)}
/>
<input
value={age}
placeholder="나이를 입력해주세요"
// 인풋 이벤트로 들어온 입력 값을 age의 값으로 업데이트
onChange={(e) => setAge(e.target.value)}
/>
<CustomButton color="green" onClick={addUserHandler}>
추가하기
</CustomButton>
</div>
);
};
export default App;
1-15 Component 분리하기
더 알아보면 좋은 키워드
- 자바스크립트 파일 절대경로, 상대경로 설정하는 방법
- 자바스크립트 export, export default, import 각각은 무슨차이가 있을까?
'Hanghae99' 카테고리의 다른 글
| 221130 TIL 팀별 과제 정리 (0) | 2022.12.01 |
|---|---|
| 221130 TIL React 입문주차 4 (0) | 2022.11.30 |
| 221126 TIL React 입문 주차 2 (0) | 2022.11.28 |
| 221125 TIL React 입문 주차 1 (0) | 2022.11.25 |
| 221124 TIL 알고리즘 문제풀이 5 (0) | 2022.11.24 |