-
Ref
일반적으로 Javascript에서 DOM에 직접 접근할 때는 document.getElementById 등을 통해서 접근한다.
React에서는 ref 라는 것을 사용해서 접근하게 된다.
Ref 란?
- ‘reference’의 약자로 ‘참조'라는 뜻이다.
- 노드나 컴포넌트에 ref 값을 만들어서 해당 요소의 값을 얻어오거나 해당 요소를 제어하는 데 사용된다.
- render 메소드에서 생성된 DOM 노드나 React element 를 엑세스 하는 방법을 제공하는 것이다.
- React에서 Ref를 사용하는 경우는 다음과 같다.
- input / textarea 등에 포커스를 해야 할때
- 특정 DOM 의 크기를 가져와야 할 때
- 특정 DOM 에서 스크롤 위치를 가져오거나 설정을 해야 할 때
- 외부 라이브러리 (플레이어, 차트, 캐로절 등) 을 사용 할 때
- 선언하여 해결할 수 있는 문제에 대해서는 ref 사용을 지양해야 한다.
- 예시) Dialog 컴포넌트에서 open() 과 close() 메서드를 두는 대신, isOpen 이라는 prop을 넘긴다.
Ref 설정
- DOM에 ref 속성을 설정한다.
- 설정하는 값은 함수로 ref를 파라미터로 가져와서 컴포넌트의 멤버변수로 설정하면 된다.
<div ref={ref => { this.mydiv = ref }}></div>
외부 라이브러리 사용 예시
CKEditor 라는 라이브러리를 사용하는 예시이다.
// App.js import React, { Component } from 'react' import './App.css'; const { ClassicEditor } = window class App extends Component { // 멤버변수 선언 editor editorDivRef async componentDidMount() { // editor 생성 this.editor = await ClassicEditor.create(this.editorDivRef) } render() { return ( <div className="editor-container"> <div id='editor' ref={ref => this.editorDivRef = ref}></div> </div> ); } } export default App;
1. 라이브러리를 적용 할 DOM에 ref를 설정한다.
<div id='editor' ref={ref => this.editorDivRef = ref}></div>
2. componentDidMount 가 발생하면 외부라이브러리 인스턴스를 생성한다.
async componentDidMount() { // editor 생성 this.editor = await ClassicEditor.create(this.editorDivRef) }
3. 컴포넌트 내용이 바뀌어야 할 일이 있다면, componentDidUpdate 에서 기존의 인스턴스를 제거하고 새로 인스턴스를 만든다.
=> 이 과정에서 componentDidUpdate 에서 실제 데이터가 바뀌었는지 비교를 해야한다.
4. 컴포넌트가 언마운트될 때 인스턴스를 제거한다.
반응형'React' 카테고리의 다른 글
React - CKEditor 사용해보기 (0) 2023.01.05 target="_blank” 사용 이슈 및 해결 (0) 2022.07.04 React - 저장된 데이터 불러올 때 개행처리 (0) 2022.05.20 React DOM (0) 2022.02.25 React 설치 (2022) (0) 2022.02.25