const [state, setState] = useState(초기값);
state : 현재상태
setState : state 변경함수
state를 배열형태로 반환해준다
setState로 state를 변경하면 컴포넌트가 업데이트(렌더링) 된다
즉, setState 함수로 state를 변경할 때마다 컴포넌트가 리렌더링된다!
state를 변경할 때, 새로 변경될 state 값이 이전 state값과 연관이 있다면 setState의 인자로 새로운 state를 넘겨주는 콜백함수를 넘겨준다
setState((prevState) => {
// 코드
return newState;
});
useState(()=>{
return heavyWorks();
})
import { useState } from "react";
import "./App.css";
const heavyWork = () => {
console.log("엄청 무거운 작업");
return ["홍길동", "김민수"];
};
function App() {
const [time, setTime] = useState(1);
const handleClick = () => {
let newTime;
if (time >= 24) {
newTime = 1;
} else {
newTime = time + 1;
}
setTime(newTime);
};
const [names, setNames] = useState(() => {
return heavyWork();
});
const [input, setInput] = useState("");
const handleInputChange = (e) => {
setInput(e.target.value);
};
const handleUpload = () => {
setNames((prevState) => {
return [input, ...prevState];
});
};
console.log(input);
return (
<>
<div>
<div>현재시각 : {time}시</div>
<button onClick={handleClick}>Update</button>
<div>
<input value={input} onChange={handleInputChange} type="text" />
</div>
<button onClick={handleUpload}>Upload</button>
{names.map((name, idx) => {
return <p key={idx}>{name}</p>;
})}
</div>
</>
);
}
export default App;