본문 바로가기
강의/스파르타코딩클럽

[리액트 입문주차] 1-12~13 State

by gardenii 2023. 6. 24.

1-12~13 State(1), (2)

1. State란?

- 컴포넌트 내부에서 바뀔 수 있는 값

- 변경될 수 있는 값은 state로 선언

- UI로의 반영을 위해 필요! - 랜더링을 다시 하기 위해서

2. useState 훅

- useState("초기값")의 반환값은, 초깃값을 가지는 변수와 변수를 다룰 수 있는 메서드를 가진 배열을 리턴해 줌

=> const [state, setState] = useState("초기값")

- hook : 특정한 기능을 수행하는 함수!

3. State 변경하기

- setValue(바꾸고 싶은 값)

예제 1 - props로 변경하기

// src/App.js
import React, { useState } from "react";
function Child(props) {
return (
<div>
<button
onClick={() => {
props.setName("박할아"); // 드디어 받은 setName을 실행합니다.
}}
>
할아버지 이름 바꾸기
</button>
<div>{props.grandFatherName}</div>
</div>
);
}
function Mother(props) {
return (
<Child grandFatherName={props.grandFatherName} setName={props.setName} /> // 받아서 다시 주고
);
}
function GrandFather() {
const [name, setName] = useState("김할아");
return <Mother grandFatherName={name} setName={setName} />; // 주고
}
function App() {
return <GrandFather />;
}
export default App;

예제 2 -  useState + onClick Event

- 버튼을 누를 때 이름이 변경되는 예제

import React, { useState } from "react";
function App() {
const [name, setName] = useState("길동이");
function onClickHandler() {
setName("누렁이");
}
return (
<div>
{name}
<button onClick={onClickHandler}>버튼</button>
</div>
);
}
export default App;

예제 3 - useState + onChange Event

- input 값이 onChange될 때, 이벤트 핸들러로 이벤트의 event.target.value 값을 저장하여 setValue로 값을 바꿔주고, 그 바뀐 값을 input의 value로 넣어주는 예제

- 즉 input값이 바뀔때 마다 바뀌는 값이 input 입력칸 안에서 함께 변경됨

- input과 state 연결 

import React, { useState } from "react";
const App = () => {
const [value, setValue] = useState("");
const onChangeHandler = (event) => {
const inputValue = event.target.value;
setValue(inputValue);
};
console.log(value); // value가 어떻게 변하는지 한번 콘솔로 볼까요?
return (
<div>
<input type="text" onChange={onChangeHandler} value={value} />
<br/>
{value}
</div>
);
};
export default App;

과제 - 간단한 로그인 구현

- input으로 아이디, 비밀번호를 입력받은 후 버튼을 누르면 alert 으로 입력받은 값을 띄워준 후 초기화

import React, { useState } from "react";
const App = () => {
const [id, setId] = useState("");
const [pw, setPw] = useState("");
const onIdChangeHandler = (event) => {
const idInput = event.target.value;
setId(idInput);
};
const onPwChangeHandler = (event) => {
const pwInput = event.target.value;
setPw(pwInput);
};
function login() {
alert(`고객님이 입력하신 아이디는 ${id} 이며, 비밀번호는 ${pw}입니다.`);
setId("");
setPw("");
}
return (
<div>
<div>
아이디 :
<input type="text" onChange={onIdChangeHandler} value={id} />
</div>
<div>
비밀번호 :
<input type="password" onChange={onPwChangeHandler} value={pw} />
</div>
<button onClick={login}>로그인</button>
</div>
);
};
export default App;