컴포넌트 내부에서 바뀔 수 있는 값. 자바스크립트에서 let, const로 변수를 선언했었는데, 리액트에서는 UI를 변경(렌더링을 다시)하기 위해서 State라는 독특한 형태로 상태를 관리하게 된다.
const [name, setName] = useState(initial value);
useState를 사용할 때에는 문서 상단에 { useState }가 import 되어 있는지 꼭 확인한다. 그러고 나서 const로 시작하는 State를 만든다. useState('여기에') 초깃값을 넣어준다.
State의 초깃값으로 넣어둔 '알랭 드 보통'이 출력되고 있다. 버튼에 온클릭 함수를 통해 setName을 실행시켜준다.
버튼을 클릭했을 때 '알랭 드 보통'이 '카를로 로벨리'로 바뀐 것을 확인할 수 있다. 자바스크립트에서 해봤던 내용이랑 비슷한데, 방법이 비슷한 듯하면서 다르다는 걸 알 수 있다.
이렇게 화살표를 그려보면 맞는걸까나? 🤔🤔🤔 input 입력값을 setFruit 하여 바뀐 fruit 값이 아래에 출력되는 형태인 것 같다. 사실 뭔가 낯설어서 이해하려고 코드를 한참을 쳐다봤다.
여튼 그렇게 실행하면, input에 입력하는 값이 제대로 아래에 출력된다.
여기까지 작성하는 데에도 우여곡절이 많았다ㅎ value="id" 이렇게 했더니 input칸에 id라는 문자열이 그대로 출력되었고, setID("event.target.value") 이렇게 했더니 event.target.value라는 문자열이 그대로 전달되는 현상이 발생하였다🤣🤣🤣 JSX문법에 얼마나 익숙하지 않은 상태인지를 잘 알게 되었다...!
onClick 이벤트 핸들러에서 인자로 이벤트 객체만 받는다면, 왜 (event)로 쓰지 않고 () 빈칸으로 둬야 하는 건지 추가로 질문해보았다.
결론은 명시적으로 (event) 이렇게 써도 되고 () 이렇게 빈칸으로 남겨둬도 된다고 한다!
그렇게 해당 부분을 수정했더니, 입력한 값을 alert에 전달하는 것까지 성공!
다음으로는 alert창을 띄우고 나서는 input값을 모두 지워줘야 하는데, 구글링한 정보로 나름 이렇게 짜봤는데도 제대로 실행이 되지 않는다.
그냥 setId와 setPw를 온클릭 함수 안에 넣어줬더니 문제는 해결됐다!!!