반응형
리액트에서는 ID 사용을 권장하지 않습니다. 컴포넌트 단위로 사용을 하는 주된 목적은 재사용성을 높이기 위한 게 가장 큰 목적인데 ID를 사용하게 되면 DOM에서 중복 ID값이 생길 수가 있게 되기 때문입니다.
그래서 리액트에서는 요소에 접근하기 위해 ref를 사용합니다. ref는 컴포넌트 내부에서만 동작하기 때문에 중복의 문제가 발생되지 않습니다.
예제코드 1
class ValidationSample extends Component {
state = {
password: '',
clicked: false,
validated: false,
};
handleChange = (e) => {
this.setState({
password: e.target.value,
});
};
handleButtonClick = (e) => {
this.setState({
clicked: true,
validated: this.state.password === '0000',
});
this._target.focus();
};
render() {
return (
<div>
<input
type="password"
value={this.state.password}
onChange={this.handleChange}
className={
this.state.clicked
? this.state.validated
? 'success'
: 'failure'
: ''
}
ref={(ref) => (this._target = ref)}
/>
<button onClick={this.handleButtonClick}>검증하기</button>
</div>
);
}
}
export default ValidationSample;
예제 코드 2
import React, { Component } from 'react';
import ScrollBox from './ScrollBox';
export default class App extends Component {
render() {
return (
<div>
<ScrollBox ref={(ref) => (this.ScrollBox = ref)} />
<button onClick={() => this.ScrollBox.scrollToBottom()}>
맨 밑으로
</button>
</div>
);
}
}
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>
);
}
}
export default ScrollBox;
반응형
'IT > React' 카테고리의 다른 글
리액트(React) 스터디일지8: 생명주기(life cycle) (0) | 2021.04.08 |
---|---|
리액트(React) 스터디일지7:반복문(Map) (0) | 2021.04.08 |
리액트(React) 스터디일지5 : 이벤트 (0) | 2021.04.08 |
리액트(React) 스터디일지4 : 컴포넌트(components) (0) | 2021.04.08 |
리액트(React) 스터디일지3 : JSX (2) | 2021.03.31 |
광고차단(애드블록)프로그램이나 브라우저를 사용중이시면 프로그램을 비활성화이나 블로그 주소를 예외 처리 해주시면 광고가 노출됩니다. 귀찮고 번거롭겠지만 광고 클릭은 저에게는 큰 힘이 됩니다. 🙇🏻♂️🙇🏻♀️
제 블로그의 모든 글은 제가 직접 작성 하고 다른 글을 참고할 때는 이전 글보다 읽기 편하게 수정해서 작성하고 있습니다. 커피 한잔 사먹고 더 열심히 좋은글로 보답하겠습니다.
오늘도 제 블로그에 와 주셔서 감사합니다. :)
제 블로그의 모든 글은 제가 직접 작성 하고 다른 글을 참고할 때는 이전 글보다 읽기 편하게 수정해서 작성하고 있습니다. 커피 한잔 사먹고 더 열심히 좋은글로 보답하겠습니다.
오늘도 제 블로그에 와 주셔서 감사합니다. :)