티스토리 뷰
Ref란?
- render 메서드에서 생성된 DOM 노드나 React 엘리먼트에 접근하는 방법을 제공.
- id와 같은 역할을 하지만, ref에서는 컴포넌트 내부에서만 작동하기 때문에 id중복 문제를 해결할 수 있음.
//jquery
$("#input").val("abc");
$("#input").focus();
const getValue = $("#input").val();
<input tyle="text" id="input"/>
//react
const inputRef = useRef();
inputRef.current.value = "abc";
inputRef.current.focus();
const getValue = inputRef.current.value;
<input type="text" ref={inputRef}/>
ref를 사용해야 하는 경우.
- 특정 input에 포커스 주기
- 스크롤박스 조작하기
- canvas 요소에 그림그리기 등
ref 설정
1. 콜백 함수로 설정
import React, { Component } from 'react';
class refSample extends Component {
render() {
return (
<div>
<input ref={(ref) => {this.inputRef=ref}} />
</div>
);
}
}
export default refSample;
ref를 달고자 하는 요소에 ref라는 콜백 함수를 props로 전달.
파라미터로 받은 ref를 컴포넌트의 멤버 변수로 설정
-> this.inputRef 는 input요소의 Dom을 가리킨다.
2. createRef로 설정
import React, { Component } from 'react';
class refSample extends Component {
inputRef = React.createRef();
render() {
return (
<div>
<input ref={this.inputRef}/>
</div>
);
}
}
export default refSample;
컴포넌트 내부에서 React.createRef()로 멤버변수를 선언.
변수를 요소의 ref props로 넣어줌.
컴포넌트에 ref 달기
<MyComponent ref={(ref) => {this.componentRef=ref}}/>
import React, { Component } from 'react';
class MyComponent extends Component {
input = React.createRef();
handleClick = (e) => {
//handle event
}
render() {
return (
<div>
<input ref={this.input} onChange={this.handleClick}/>
</div>
);
}
}
export default MyComponent;
컴포넌트에 설정한 ref로 MyComponent 컴포넌트 내부의 메서드나 멤버 변수에 접근 가능.
componentRef.handleClick, componentRef.input 등
예시)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
import React, { Component } from 'react';
class ScrollBox extends Component {
scrollToBottom = () => {
const {scrollHeight, clientHeight} = this.boxRef;
this.boxRef.scrollTop = scrollHeight - clientHeight;
}
render() {
const style ={
border: '1px solid black',
height: '300px',
width: '300px',
overflow : 'auto',
position: 'relative'
};
const innerStyle = {
width: '100%',
height: '650px',
background : 'linear-gradient(white, black)'
}
return (
<div style={style} ref ={(ref) => {this.boxRef = ref}}>
<div style={innerStyle}/>
</div>
);
}
}
export default ScrollBox;
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
import React, { Component } from 'react';
import ScrollBox from './scrollBox_ref';
class App extends Component {
render() {
return (
<div>
<ScrollBox ref={(ref) => this.scrollBox = ref}/>
<button onClick={() => this.scrollBox.scrollToBottom()}>맨 밑으로</button>
</div>
);
}
}
export default App;
|
ScrollBox 컴포넌트에 scrollbox ref 생성,
부모 컴포넌트(App.js)에서 컴포넌트 내부의 scrollToBottom() 메서드를 호출
참조 : 리액트를 다루는 기술(김민준 / 길벗)
'SW프로그래밍 > React' 카테고리의 다른 글
[React]라이프사이클 메서드 (0) | 2021.03.19 |
---|---|
[React] 컴포넌트 반복, map()함수 (0) | 2021.03.12 |
[React]이벤트 핸들링 (0) | 2021.03.08 |
[React]state (0) | 2021.03.08 |
[React]컴포넌트와 Props (0) | 2021.03.08 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- date
- Redux
- hashmap
- webpack
- 리액트
- typescript
- 클래스형
- html
- 스프링
- ajax
- nodeJS
- 함수형
- React
- angular
- Progressbar
- script
- JSON
- input
- Spring
- java
- paging
- JSP
- datePicker
- value
- javascript
- module
- hooks
- list
- Props
- JSX
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함