๐ ref
HTML์์ id๋ฅผ ์ฌ์ฉํ์ฌ DOM์ ์ด๋ฆ์ ๋ค๋ ๊ฒ์ฒ๋ผ Reactํ๋ก์ ํธ ๋ด๋ถ์์ DOM์ ์ด๋ฆ์ ๋ค๋ ๋ฐฉ๋ฒ์ด
ref(reference)
๊ฐ๋ ์ ๋๋ค.
๐ ํจ์ํ ์ปดํฌ๋ํธ์์ ref๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด Hooks๋ฅผ ์ฌ์ฉํด์ผ ํ๊ธฐ ๋๋ฌธ์
Classํ ์ปดํฌ๋ํธ ๋จผ์ ์์๋ณด๊ฒ ์ต๋๋ค.
๐ ref๋ ์ด๋ค ์ํฉ์์ ์ฌ์ฉํด์ผ ํ ๊น
- React์์ state๋ก๋ง ํด๊ฒฐํ ์ ์๊ณ , DOM์ ๋ฐ๋์
์ง์ ๊ฑด๋๋ ค์ผ ํ ๋
์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค.- ex) ํน์ input์ focus์ฃผ๊ธฐ, scroll box ์กฐ์, canvas ์์์ ๊ทธ๋ฆผ ๊ทธ๋ฆฌ๊ธฐ ๋ฑ
๐ Classํ ์ปดํฌ๋ํธ - ์ฝ๋ฐฑ ํจ์๋ฅผ ํตํ ref ์ค์ ํ๊ธฐ
- ref๋ฅผ ๋ง๋๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ์
์ฝ๋ฐฑ ํจ์
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. - ref๋ฅผ ๋ฌ๊ณ ์ ํ๋ ์์์ ref๋ผ๋ ์ฝ๋ฐฑ ํจ์๋ฅผ
props
๋ก ์ ๋ฌํด ์ฃผ๋ฉด ๋ฉ๋๋ค. - ์ด ์ฝ๋ฐฑ ํจ์๋ ref ๊ฐ์ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ๋ฐ์ต๋๋ค.
- ๊ทธ๋ฆฌ๊ณ ํจ์ ๋ด๋ถ์์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ ref๋ฅผ ์ปดํฌ๋ํธ์ ๋ฉค๋ฒ ๋ณ์๋ก ์ค์ ํด ์ค๋๋ค.
์์ input ์์๋ ์์ผ๋ก react ์ฝ๋ ๋ด์์ this.input์ ํตํ์ฌ ์ ๊ทผ์ด ๊ฐ๋ฅํด์ง๋๋ค.<input ref={(ref) => { this.input = ref; }} />
this.input ๋ง๊ณ ์ฌ์ฉ์๊ฐ ์ํ๋ ์ด๋ค ์ด๋ฆ์ด๋ผ๋ ์์ ๋กญ๊ฒ ๊ฐ๋ฅํฉ๋๋ค.
์ด๋ react ๋ด์์id
์ฒ๋ผ ์ฐ์ด๊ฒ ๋ ๊ฒ์ ๋๋ค.
๐ Classํ ์ปดํฌ๋ํธ - createRef๋ฅผ ํตํ ref ์ค์
ref๋ฅผ ๋ง๋๋ ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ react์ ๋ด์ฅ๋์ด ์๋ createRef๋ผ๋ ํจ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค.
์ด ๊ธฐ๋ฅ์ react v16.3๋ถํฐ ๋์
๋์์ผ๋ฉฐ ์ด์ ๋ฒ์ ์์๋ ์๋ํ์ง ์์ต๋๋ค.
import { Component } from 'react';
class Sample extends Component{
input = React.createRef();
handleFocus = () => {
this.input.current.focus();
}
render(){
return(
<div>
<input ref={this.input} />
</div>
)
}
}
export default Sample;
- createRef๋ฅผ ์ฌ์ฉํ์ฌ ref๋ฅผ ๋ง๋ค๋ ค๋ฉด ์ฐ์ ์ปดํฌ๋ํธ ๋ด๋ถ์์ ๋ฉค๋ฒ ๋ณ์๋ก
React.createRef()
๋ฅผ ๋ด์์ฃผ์ด์ผ ํฉ๋๋ค. - ํด๋น ๋ฉค๋ฒ ๋ณ์๋ฅผ ref๋ฅผ ๋ฌ๊ณ ์ ํ๋ ์์์
ref props
๋ก ๋ฃ์ด ์ฃผ๋ฉด ref ์ค์ ์ด ์๋ฃ๋ฉ๋๋ค. - ์ค์ ํ ๋ค ๋์ค์ ref๋ฅผ ์ค์ ํด ์ค DOM์ ์ ๊ทผํ๋ ค๋ฉด
this.input.current
๋ฅผ ์กฐํํ๋ฉด ๋ฉ๋๋ค. - ์ฝ๋ฐฑ ํจ์๋ฅผ ์ฌ์ฉํ ๋์ ๋ค๋ฅธ ์ ์ ๋ท๋ถ๋ถ์
.current
๋ฅผ ๋ฃ์ด ์ฃผ์ด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค.
๐ ์ปดํฌ๋ํธ์ ref ๋ฌ๊ธฐ
react์์๋ ์ปดํฌ๋ํธ์๋ ref๋ฅผ ๋ฌ ์ ์์ต๋๋ค. ์ด ๋ฐฉ๋ฒ์ ์ฃผ๋ก ์ปดํฌ๋ํธ ๋ด๋ถ์ ์๋ DOM์ ์ปดํฌ๋ํธ ์ธ๋ถ์์ ์ฌ์ฉํ ๋ ์๋๋ค. DOM์ ref๋ฅผ ๋ค๋ ๋ฐฉ๋ฒ๊ณผ ๋๊ฐ์ต๋๋ค.
<MyComponent
ref={(ref) => {this.myComponent}}
/>
์ด๋ ๊ฒ ํ๋ฉด MyComponent ๋ด๋ถ์ ๋ฉ์๋ ๋ฐ ๋ฉค๋ฒ ๋ณ์์๋ ์ ๊ทผํ ์ ์์ต๋๋ค.