controlled/uncontrolled componenet 에 대해서 알아보겠습니다.
바탕화면에서 vscode열어서 create-react-app 만들고 해당폴더에서 vscode열고 터미널 열어서 npm start해 놓아주세요
src/controll폴더 만들고 안에 controlled.jsx 만들어 주세요
오늘은 class를 만드는 것이니 정신차리고 해봅시다 ㅎㅎ
다들 설날 잘보내세요 ㅎㅎ 저는 주말이라서 그냥 할거도 없고해서 공부하면서 글도 올리고있습니다.
만든 파일안에
이렇게 기본적인 형식을 만들어 봅시다

그리고 npm start로 켜놓은 창을 보면

이렇게 제대로 동작이 된게 보일겁니다 그럼 ctrl+shift+i로 콘솔창을 열어보면

이런 오류가 뜹니다.
즉 onchange라는 이벤트 핸드러가 없어서 오류가 나오는 겁니다. 이제 변화가 생길때마다 실행할 함수를 만들어주러 가봅시다
src/controll/Controlled로 이동
state에 value를 " "대신 "df"로 바꺼주고
이렇게 나오고 npm start 가서 콘솔 창 까지 같이 켜봅시다
이렇게 df가 기본적으로 켜저있고 로그에 그 값이 나와있습니다. 이제 input창을 클릭하고 아무거나 쳐봅시다
어 보면 콘솔 창은 바뀌는데 input내부에는왜 안바뀔까 의문이 들수 있습니다. 바로 value때문입니다. 안에 내용이 바뀌어도
state.value가 바뀌지 않기때문에 항상 다시 원래 state.value값으로 돌아옵니다.
그럼 이제 이게 제대로 작동하도 록 change함수를 고쳐 주겠습니다.

그럼 추가된 줄이 무슨의미인지 알아보겠습니다.
setState즉 State값을 설정하는겁니다. 즉 state의 value를 e.targe.value로 변경하게 되는 겁니다.
그런데 setState는갑자기 어디서 나왔냐 할수있느데 이건 extends로 상속받음으로써 쓸수 있게 된것입니다.
다시 npm start창을 보면
이렇게 제대로 동작되는걸 확인할수 있습니다. 짠
그럼 이제 uncontrolled에 대해서 알아보겠습니다.
controll 폴더에 uncontrolled.jsx 생성 해주겠습니다.


npm start 창을 켜서 새로고침하고 입력하고 전송 버튼 누르면 이렇게 잘되는걸 확인할수 있습니다.
그럼 우린는 이걸 react로 어떻게 더 단순하게 할수 있는지 알아 봅시다.
controll 폴더에 uncontrolled.jsx 내부를 이렇게 고쳐주겠습니다.
ref={this.inputRef}이거는 여기의ref는 inputRef라는 의미입니다.
즉 여기의 값이 변하면 ref안에있는 것의 값도 변한다는 의미입니다. 그래서
console.log(this.inputRef.current.value); 이것이 실행되면 새로운 입력된 값이 나오게 됩니다.
한번 npm start로 확인해보죠
입력하기전 value는 "" 인 빈공간입니다.
이제 입력하고 전송을 눌러보겠습니다
그러면 이렇게 값이 변한걸 확인할수 있습니다. 우리가 했던 고전방식과 똑같이 작동이 됩니다.
그리고 위웨 사진 부분이 이해가 안될수 있습니다.
이부분을 설명하면 즉 render할때는 값이 null인데 mount하고 나니까 input으로 바뀌었습니다.
이건 왜그럴까요??? 바론 순서입니다. render가 완전히 실행 되기전에 출력을 하기 때문에
input이 안나오고
did mount 할대는 render 로 이미 실행이 됬기때문에 inputRef는 input과 연결 되어 있기때문에
input이 뜨게 되엇습니다.
오늘은 여기까지 하도록 하죠 ㅂㅂㅂㅂㅂ
'React를 같이 배워보자' 카테고리의 다른 글
React13일차-Hook2 (0) | 2022.02.01 |
---|---|
React12일차-Hook (0) | 2022.01.31 |
React10일차-antdesign (0) | 2022.01.29 |
React10일차-reactshadow (0) | 2022.01.29 |
React9일차-Component style (0) | 2022.01.28 |