-
refJavascript/React.js 2020. 5. 3. 14:16
id
일반 HTML에서 DOM 요소에 이름을 달 때는 id를 사용한다. 특정 DOM 요소에 어떤 작업을 할 때 id를 달아서 특정 id에 스타일을 적용하거나 자바스크립트를 적용한다.
react에서는 해당 id에 컴포넌트를 렌더링하라는 코드가 있다.
ReactDOM.render(<App />, document.getElementById('root'));
HTML 처럼 프로젝트 내부에서 DOM에 이름을 다는 방법이 있는데 이를 ref 라고 한다.
ref 사용 상황
DOM을 꼭 직접적으로 건드려야 할 때 사용한다. 예를 들어, 특정 input에 포커스 주기, 스크롤 박스 조작하기, Canvas 등이 있다.
createRef()
React에 내장되어 있는 createRef 함수를 사용해 ref를 설정할 수 있다. 설정하는 방법은 다음과 같다.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersimport React, { Component } from 'react'; import './RefSample.css'; class RefSample extends Component { state = { password : '', clicked : false, validated : false, } // 멤버 변수로 React.createRef()를 담아줌 input = React.createRef(); handleChange = (e) => { this.setState({ password : e.target.value }); } handleButtonClick = () => { this.setState({ clicked : true, validated : this.state.password === '0000' }); // setState가 끝나고 input이 있는 곳으로 포커스 옮김 this.input.current.focus(); } render() { return ( <div> {/*ref 달고자 하는 요소에 멤버 변수를 ref props로 넣어준다*/} <input type="password" value={this.state.password} onChange={this.handleChange} className={this.state.clicked ? (this.state.validated ? 'success' : 'failure') : ''} // ref 적용 ref={ this.input } /> <button onClick={this.handleButtonClick} >validate</button> </div> ); } } export default RefSample; 컴포넌트에 ref 달기
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersimport React, { Component } from 'react'; class ScrollBox extends Component { input = React.createRef(); 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={this.input.box} > <div style={innerStyle}></div> </div> ); } } export default ScrollBox; 'Javascript > React.js' 카테고리의 다른 글
lifecycle (0) 2020.05.03 컴포넌트 반복 (0) 2020.05.03 event (0) 2020.05.02 state (0) 2020.05.02 class component & props (0) 2020.05.02