728x90
State
- state는 리액트에서 데이터 값을 저장하는 객체이다.
- state가 아닌 변수에 저장하고 데이터를 변화시키면 update 작업이 일어나지 않아 변수의 변화가 렌더링 되지 않는다.
- 함수형 컴포넌트에서는 state를 사용할 때 useState라는 훅을 사용한다.
useState
- 먼저 아래에 index.js가 있다는 가정하에 코딩하겠다.
import { StrictMode } from "react";
import { createRoot } from "react-dom/client";
import App from "./App";
const rootElement = document.getElementById("root");
const root = createRoot(rootElement);
root.render(
<StrictMode>
<App />
</StrictMode>
);
- useState라는 훅은 배열을 반환한다.
- 첫 번째 값은 데이터의 값
- 두 번째 값은 데이터 값을 수정할 수 있게 해주는 함수
button 관리
+1 버튼을 누르면 숫자가 증가하고, -1 버튼을 누르면 숫자가 감소하는 앱을 만들어보자.
import "./styles.css";
import { useState } from "react";
export default function App() {
const [number, setNumber] = useState(0);
console.log(useState);
return (
<div >
<div>{number}</div>
<button>+1</button>
<button>-1</button>
</div>
);
}
- useState를 이용해 number라는 state변수와 number을 수정하는 setNumber 함수를 얻었다.
- 브라우저에는 number의 값과 +1,-1 버튼이 렌더링 되게 했다.
- 이제 button에 click 이벤트 발생 시 동작할 함수를 지정해주면 된다.
import { useState } from "react";
export default function App() {
const [number, setNumber] = useState(0);
const handleIncrease = () => {
setNumber((current) => current + 1);
};
const handleDecrease = () => {
setNumber((current) => current - 1);
};
console.log(useState);
return (
<div>
<div>{number}</div>
<button onClick={handleIncrease}>+1</button>
<button onClick={handleDecrease}>-1</button>
</div>
);
}
- +1 버튼을 누르면 number 증가
- -1 버튼을 누르면 number 감소
- 수정하게 해주는 setNumber 함수를 통해 number 값을 바꾼다.
Modify 함수 사용법
기존 값과 상관없는 값으로 수정할 때
setState('apple');
- 이때는 새로운 값을 인자로 전달하면 바로 수정된다.
기존 값을 이용하여 값을 수정할 때
setState((current)=>current+1);
- 위의 앱처럼 기존 값을 이용하여 값을 수정할 때는 기존 값을 인자로 전달한 함수를 통해 수정하는 게 좀 더 안전하다.
Input 관리
input에 이름을 입력하면 이름을 포함한 문구를 띄워주는 앱을 만들어보자.
export default function App() {
return (
<div>
<div>
<input placeholder="이름을 입력하시오" />
</div>
<button>초기화</button>
<button>등록</button>
</div>
);
}
- 먼저 이름을 입력할 input 을 만들어준다.
- 입력값을 초기화 해줄 버튼을 만든다.
- 이름을 등록해줄 버튼을 만든다.
State
위의 기능을 구현하기 위해 사용해야 할 state들
- text state : input에 입력하는 값들을 저장할 text state가 필요하다.
- name state : 등록 버튼을 눌렀을 때의 text값을 저장할 name state가 필요하다.
Function
위의 기능을 구현하기 위해 필요한 함수들
- handleChange : 입력하는 text를 text 값에 넣어줄 함수
- handleRest : 초기화 버튼을 눌렀을 때 input을 초기화해줄 함수
- handleConfirm : 등록 버튼을 눌렀을 때의 text 값을 name 값에 넣어줄 함수
import { useState } from "react";
export default function App() {
const [text, setText] = useState("");
const [name, setName] = useState("");
const handleChange = (event) => {
setText(event.target.value);
};
const handleReset = () => {
setText("");
};
const handleConfirm = () => {
setName(text);
};
return (
<div>
<div>
{name === "" ? (
<input
onChange={handleChange}
placeholder="이름을 입력하시오"
value={text || ""}
/>
) : (
<div>{name}님 환영합니다!</div>
)}
</div>
<button onClick={handleReset}>초기화</button>
<button onClick={handleConfirm}>등록</button>
</div>
);
}
- 앞서 언급한 기능들을 모두 구현했다.
input value 관리
handleChange에서 event 인자를 통해 어떻게 입력값을 얻었을까?
- input 태그에서 발생하는 Change 이벤트를 콘솔 창을 통해 보자.
- nativeEvent 객체 내부에 target 객체가 있고, 그 안에 입력값인 value값이 있다.
728x90
'Frontend > React' 카테고리의 다른 글
[React] useState batching, 비동기, 동기처리 (0) | 2022.08.06 |
---|---|
[React]Router v6 사용법, 관련 Hooks 정리 (0) | 2022.07.23 |
[React] React useEffect/componentDidMount/componentDidUpdate/componentWillUnmount (0) | 2022.07.14 |
[React] React 컴포넌트/Props (0) | 2022.07.06 |
[React] 리액트 특징, 라이프 사이클 (0) | 2022.07.05 |