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;