티스토리 뷰
ref의 역할은 무엇일까요?
ref 사용해보기
해당 코드를 통해서 간단한 입력창을 만들 수 있습니다. 입력창에 아무거나 입력하고 버튼을 눌러주세요.
코드를 통해서 해당 입력창을 만들 수 있습니다.
버튼을 누르고 나면 입력창 안에 포커스가 활성화 되지 않습니다. ref를 추가해서 버튼을 누르고 난 뒤에 입력창 안에 포커스가 활성화 되도록 만들어 보겠습니다.
달라진 코드를 한번 볼까요?
우선 생성자 함수 안에 ref를 만들어주시면 됩니다. 이름을 input이라고 지었지만 여기엔 다른 이름을 사용하셔도 됩니다.
this.input 대신에 this.focusing처럼 다른 이름을 한번 사용해보세요.
그리고 만든 ref를 jsx 안에서 사용할 엘리먼트에 ref로 전달해주세요. 저는 ref={this.input}으로 전달해주었습니다. 마지막으로 버튼을 클릭했을 때 발생되는 이벤트를 만들어주세요.
current는 ref가 html 엘리먼트에 설정되면 해당 엘리먼트를 가리키고, 리액트 컴포넌트에 설정되면 해당 컴포넌트를 가리킵니다.
함수 안에 this.input.current는 입력창을 가르키고, 여기에 포커스를 주도록 설정했습니다.
새로워진 입력창에 입력해보세요.
제출 버튼을 누른뒤에 입력창에 다시 포커스가 가는 것을 확인할 수 있습니다.
ref 속성에 콜백함수를 전달해서 설정할 수도 있습니다. 위의 코드는 콜백함수를 전달해서 똑같이 구현했습니다. 함수를 전달할 때는 생성자 안에서 ref를 만들필요도 없이 바로 함수를 전달해주면 되고, current가 사라진다는 것을 주의해주세요.
ref를 사용할 때 조심할 점
ref를 통해서 연결된 것들이 너무 많으면 나중에 유지보수 하기가 아주 어렵게 되기 때문입니다. 꼭 필요한 경우에 적절하게 사용할 수 있도록 하셔야합니다.
리액트에 대해서 여러 기능들을 다시 돌아보며 포스팅을 하고 있습니다. 공감은 제작자에게 큰 힘이 됩니다.
'Frontend-dev > react' 카테고리의 다른 글
예제를 통해 리덕스(redux)를 연습해봅시다. (0) | 2018.11.27 |
---|---|
리덕스(redux)의 개념을 알아봅시다. (0) | 2018.11.27 |
리액트 프로젝트에 sass 설정하기 (0) | 2018.11.12 |
리액트 프로젝트에 css module 적용시키기 (0) | 2018.11.08 |
expo와 react-native를 통해 앱을 만들면서 느낀 것들 (0) | 2018.10.06 |