react ์คํฐ๋์์ ๋ฆฌ์กํธ๋ฅผ ๋ค๋ฃจ๋ ๊ธฐ์ ์ด๋ผ๋ ์ฑ ์ ์ ์ ํ๊ณ ์ด ์ฑ ์ ์ฝ๊ณ ๋ฐฐ์ด ๊ฒ์ ๋ฐํ์ผ๋ก ์์ฑ๋์๋ค.
DOM
์ ์ ํํ ๋ useRef
๋ฅผ ์ฌ์ฉํ๋ค.DOM
์ ์ง์ ์ ์ผ๋ก ์ ๊ทผํด์ผ ํ๋ ๊ฒฝ์ฐuseRef()
๋ฅผ ์ฌ์ฉํ์ฌ Ref ๊ฐ์ฒด
๋ฅผ ๋ง๋ค๊ณ , ์ด ๊ฐ์ฒด๋ฅผ ์ฐ๋ฆฌ๊ฐ ์ ํํ๊ณ ์ถ์ DOM
์ ref
๊ฐ์ผ๋ก ์ค์ ํ๋ค.Ref ๊ฐ์ฒด
์ .current
๊ฐ์ ์์ ์ ํํ DOM ์ ๊ฐ๋ฅดํค๊ฒ ๋๋ค.import React, { useState, useRef } from 'react';
function InputSample() {
const [inputs, setInputs] = useState({
name: '',
nickname: ''
});
const nameInput = useRef();
const { name, nickname } = inputs;
const onChange = e => {
const { value, name } = e.target;
setInputs({
...inputs,
[name]: value
});
};
const onReset = () => {
setInputs({
name: '',
nickname: ''
});
nameInput.current.focus();
};
return (
<div>
<input
name="name"
placeholder="์ด๋ฆ"
onChange={onChange}
value={name}
ref={nameInput}
/>
<input
name="nickname"
placeholder="๋๋ค์"
onChange={onChange}
value={nickname}
/>
<button onClick={onReset}>์ด๊ธฐํ</button>
<div>
<b>๊ฐ: </b>
{name} ({nickname})
</div>
</div>
);
}
export default InputSample;
useRef
๋ฅผ ์ด์ฉํ์ฌ ์ปดํฌ๋ํธ ์์์ ์กฐํ ๋ฐ ์์ ํ ์ ์๋ ๋ณ์๋ฅผ ๊ด๋ฆฌํ ์ ์๋ค.useRef
๋ก ๊ด๋ฆฌํ๋ ๋ณ์๊ฐ ๋ฐ๋๋ค๊ณ ํด์ ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง๋์ง ์๋๋ค.useRef
๋ก ๊ด๋ฆฌํ๊ณ ์๋ ๋ณ์๋ ์ค์ ํ ๋ฐ๋ก ์กฐํํ ์ ์๋ค.๐ก ์ผ๋ฐ ๋ก์ปฌ ๋ณ์ ๋์ useRef
๋ฅผ ์ด์ฉํ๋ ์ด์ ?
re-rendering
๋๋ฉด ๋ก์ปฌ ๋ณ์๋ค์ ์ด๊ธฐํํ๋ค.useRef
๋ก ๋ง๋ค์ด์ง ๊ฐ์ฒด๋ React๊ฐ ๋ง๋ ์ ์ญ ์ ์ฅ์์ ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ ๋ฆฌ๋ ๋๋ง๋๋๋ผ๋ ๋ง์ง๋ง์ผ๋ก ์
๋ฐ์ดํธํ current ๊ฐ์ด ์ ์ง๋๋ค.<input ref = { (ref) => {this.input = ref}} />
import { Component } from "react";
class RefSample extends Component {
input = React.createRef();
handleFocus = () => {
this.input.current.focus();
}
render() {
return (
<div>
<input ref = {this.input}/>
</div>
);
}
}