리액트에서는 컴포넌트에도 ref를 달 수 있다. 컴포넌트 내부에 있는 DOM을 컴포넌트 외부에서 사용할 때 사용한다.
<MyComponent ref={(ref) => {this.myComponent=ref}} />
이렇게 하면 MyComponent 내부의 메서드 및 멤버 변수에도 접근할 수 있다.
import React, { Component } from 'react';
class ScrollBox extends Component {
scrollToBottom = () => {
const { scrollHeight, clientHeight } = this.box;
this.box.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.box = ref;
}}
>
<div style={innerStyle}></div>
</div>
);
}
}
export default ScrollBox;
import { Component } from 'react';
import ScrollBox from './ScrollBox';
class App extends Component {
render() {
return (
<div>
<ScrollBox
ref={(ref) => {
this.ScrollBox = ref;
}}
/>
<button onClick={() => this.ScrollBox.scrollToBottom()}>
맨 밑으로
</button>
</div>
);
}
}
export default App;
<button onClick={this.ScrollBox.scrollToBottom()}>
이렇게 쓰는 것도 틀린 것은 아니지만 컴포넌트가 처음 랜더링 하는 과정에서 오류가 발생할 수 있음
<button onClick={() => this.ScrollBox.scrollToBottom()}>
화살표 함수를 사용하여 새로운 함수로 만들고 사용해야 오류를 막을 수 있음리액트에서는 컴포넌트에도 ref를 달 수 있다. 컴포넌트 내부에 있는 DOM을 컴포넌트 외부에서 사용할 때 사용한다.
<MyComponent ref={(ref) => {this.myComponent=ref}} />
이렇게 하면 MyComponent 내부의 메서드 및 멤버 변수에도 접근할 수 있다.
import React, { Component } from 'react';
class ScrollBox extends Component {
scrollToBottom = () => {
const { scrollHeight, clientHeight } = this.box;
this.box.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.box = ref;
}}
>
<div style={innerStyle}></div>
</div>
);
}
}
export default ScrollBox;
import { Component } from 'react';
import ScrollBox from './ScrollBox';
class App extends Component {
render() {
return (
<div>
<ScrollBox
ref={(ref) => {
this.ScrollBox = ref;
}}
/>
<button onClick={() => this.ScrollBox.scrollToBottom()}>
맨 밑으로
</button>
</div>
);
}
}
export default App;
<button onClick={this.ScrollBox.scrollToBottom()}>
이렇게 쓰는 것도 틀린 것은 아니지만 컴포넌트가 처음 랜더링 하는 과정에서 오류가 발생할 수 있음
<button onClick={() => this.ScrollBox.scrollToBottom()}>
화살표 함수를 사용하여 새로운 함수로 만들고 사용해야 오류를 막을 수 있음
'FRONT-END > REACTJS' 카테고리의 다른 글
컴포넌트의 라이프사이클 (0) | 2021.12.28 |
---|---|
컴포넌트 반복 (0) | 2021.12.26 |
ref 사용 (0) | 2021.12.24 |
ref를 사용하는 상황 (0) | 2021.12.24 |
이벤트 핸들링 (0) | 2021.12.20 |