๐ useRef
useRef๋?
useRef๋ React์์ ์ฌ์ฉ๋๋ Hook ์ค ํ๋๋ก, ํจ์ํ ์ปดํฌ๋ํธ์์ "์ฐธ์กฐ(reference)"๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
useRef๋ฅผ ์ด์ฉํ๋ฉด DOM ์์๋ ๋ค๋ฅธ React ์ปดํฌ๋ํธ์ ์ ๊ทผํ ์ ์์ผ๋ฉฐ, ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง๋ ๋์๋ ์ ์ง๋ฉ๋๋ค.
useRef์ ์ฃผ์ ์ฉ๋
- DOM ์์์ ์ ๊ทผ: useRef๋ฅผ ์ฌ์ฉํ์ฌ ref๋ฅผ ์์ฑํ๋ฉด, ํด๋น ref๋ฅผ ํน์ DOM ์์์ ์ฐ๊ฒฐํ ์ ์๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํ์์ ๋ฐ๋ผ ํด๋น DOM ์์์ ์์ฑ์ด๋ ๋ฉ์๋์ ์ง์ ์ ๊ทผํ ์ ์์ต๋๋ค.
- ์ปดํฌ๋ํธ ๋ณ์ ์ ์ง: useRef๋ฅผ ์ฌ์ฉํ์ฌ ๋ณ์๋ฅผ ์ ์ธํ๋ฉด, ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง๋์ด๋ ๋ณ์์ ๊ฐ์ด ์ ์ง๋ฉ๋๋ค. ์ด๋ฅผ ํ์ฉํ์ฌ ์ปดํฌ๋ํธ์ ์ํ๊ฐ ์๋ ์ผ์์ ์ธ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ฑฐ๋ ๋ค๋ฅธ ๋ชฉ์ ์ผ๋ก ํ์ฉํ ์ ์์ต๋๋ค.
useRef ์ฌ์ฉ ๋ฐฉ๋ฒ
import React, { useRef, useEffect } from 'react';
const MyComponent = () => {
// DOM ์์์ ์ ๊ทผํ๋ ์์
const myButtonRef = useRef(null);
// ์ปดํฌ๋ํธ ๋ณ์ ์ ์งํ๋ ์์
const counterRef = useRef(0);
// useEffect๋ฅผ ์ฌ์ฉํ์ฌ ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง๋ ๋๋ง๋ค ์คํ๋ ํจ๊ณผ๋ฅผ ๊ตฌํํฉ๋๋ค.
useEffect(() => {
// DOM ์์์ ์ ๊ทผํ์ฌ ๋ฒํผ์ ํฌ์ปค์ค๋ฅผ ์ค๋๋ค.
if (myButtonRef.current) {
myButtonRef.current.focus();
}
// ์ปดํฌ๋ํธ ๋ณ์ ๊ฐ์ ๋ณ๊ฒฝํ๋ฉด์ ์ ์งํ ์ ์์ต๋๋ค.
counterRef.current += 1;
console.log('Counter:', counterRef.current);
});
return (
<div>
{/* ref๋ฅผ ๋ฒํผ์ ์ฐ๊ฒฐํฉ๋๋ค. */}
<button ref={myButtonRef}>Click Me</button>
<p>Counter: {counterRef.current}</p>
</div>
);
};
export default MyComponent;
useRef๋ฅผ ์ด์ฉํ์ฌ ๋ฒํผ์ ํฌ์ปค์ค๋ฅผ ์ค ์ ์๊ณ , counterRef๋ฅผ ํตํด ์ปดํฌ๋ํธ ๋ณ์ ๊ฐ์ ๋ณ๊ฒฝํ๋ฉด์ ์ ์งํ ์ ์๋ค. ์ด๋ฌํ ๋์์ ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง๋์ด๋ useRef๋ฅผ ํตํด ์ ์ง๋๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ๋ค.
๐ Cookie
- Cookie์ MaxAge, Expires ์ต์ ์ด ๋ฌด์์ธ์ง, ์ค์ ํ์ง ์์ผ๋ฉด ์ด๋ป๊ฒ ๋๋์ง ์ค๋ช ํด์ฃผ์ธ์.
Cookie๋?
์ฟ ํค(Cookie)๋ ์น ๋ธ๋ผ์ฐ์ ์ ์ ์ฅ๋๋ ์์ ๋ฐ์ดํฐ ์กฐ๊ฐ์ผ๋ก, ์น ์ฌ์ดํธ์ ์ฌ์ฉ์ ๊ฐ์ ์ํ ์ ๋ณด๋ฅผ ์ ์งํ๊ณ ์ธ์ ๊ด๋ฆฌ, ์ฌ์ฉ์ ์ถ์ ๋ฑ์ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋๋ค. ์ฟ ํค๋ ์๋ฒ๊ฐ ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ , ํด๋น ์ฌ์ฉ์๊ฐ ๊ฐ์ ์น ์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํ ๋๋ง๋ค ๋ธ๋ผ์ฐ์ ๊ฐ ๊ทธ ๋ฐ์ดํฐ๋ฅผ ํจ๊ป ๋ณด๋ด์ฃผ๋ ๋ฐฉ์์ผ๋ก ๋์ํฉ๋๋ค.
์ฟ ํค๋ ์ด๋ฆ, ๊ฐ, ๋ง๋ฃ ๋ ์ง, ๊ฒฝ๋ก(path) ๋ฑ์ ์์ฑ์ ๊ฐ์ง๋ค. ๋ํ, ์ฟ ํค๋ ์น ์ฌ์ดํธ ๋๋ฉ์ธ ๋ ๋ฒจ์์ ์ค์ ๋๊ธฐ ๋๋ฌธ์ ํ์ ๋๋ฉ์ธ ๊ฐ์ ๊ณต์ ํ ์ ์๋ค.
MaxAge์ Expires ์ต์
- MaxAge: ์ฟ ํค์ ์ ํจ๊ธฐ๊ฐ์ ์ด ๋จ์๋ก ์ค์ ํ๋ค. MaxAge ์์ฑ์ด ์ค์ ๋ ์ฟ ํค๋ ๋ธ๋ผ์ฐ์ ์ ์ํด ํด๋น ๊ธฐ๊ฐ๋งํผ ๋ณด๊ด๋๋ฉฐ, ์ ํจ ๊ธฐ๊ฐ์ด ์ง๋ ์ฟ ํค๋ ์๋์ผ๋ก ์ญ์ ๋๋ค. MaxAge ์์ฑ์ Expires๋ณด๋ค ์ฐ์ ์์๊ฐ ๋๋ค. ์๋ฅผ ๋ค์ด, MaxAge๊ฐ ์ค์ ๋ ๊ฒฝ์ฐ Expires๋ ๋ฌด์๋๋ค.
- Expires: ์ฟ ํค์ ๋ง๋ฃ ๋ ์ง๋ฅผ ์ค์ ํ๋ค. ๋ง๋ฃ ๋ ์ง๋ฅผ ์ง๋๋ฉด ๋ธ๋ผ์ฐ์ ์์ ํด๋น ์ฟ ํค๋ฅผ ์ญ์ ํ๋ค. Expires๋ ๊ณผ๊ฑฐ ๋ ์ง๋ ํ์ฌ ๋ ์ง๋ณด๋ค ์ด์ ๋ ์ง๋ก ์ค์ ํ๋ฉด ์ฆ์ ์ญ์ ๋๋๋ก ๋ง๋ค ์ ์๋ค.
์ต์ ์ ์ค์ ํ์ง ์์ ๊ฒฝ์ฐ
- ๋ง์ฝ ์ฟ ํค์ MaxAge์ Expires ์ต์ ์ด ๋ชจ๋ ์ค์ ๋์ง ์์ ๊ฒฝ์ฐ ํด๋น ์ฟ ํค๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์คํ๋๋ ๋์๋ง ์ ์ง๋๊ณ , ๋ธ๋ผ์ฐ์ ๋ฅผ ์ข ๋ฃํ๋ฉด ์ญ์ ๋๋ค. ์ด๋ฅผ "์ธ์ ์ฟ ํค(Session Cookie)"๋ผ๊ณ ํฉ๋๋ค.
- ์ธ์ ์ฟ ํค๋ ์น ๋ธ๋ผ์ฐ์ ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ ๋ณด์์ ์ธ ์ธก๋ฉด์์ ์ผ์์ ์ธ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๋ฐ ์ ํฉํ๋ค. ํ์ง๋ง ๋ธ๋ผ์ฐ์ ๋ฅผ ์ข ๋ฃํ๋ฉด ์ธ์ ์ฟ ํค๋ ์ฌ๋ผ์ง๋ฏ๋ก, ๋ค์ ํด๋น ์น ์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํ ๋ ์๋ก์ด ์ธ์ ์ฟ ํค๊ฐ ์์ฑ๋๋ค.
'TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์คํ ์ปจํ ์คํธ (1) | 2023.10.11 |
---|---|
JavaScript ๋ฐํ์ (0) | 2023.08.04 |
require์ import ใป const (0) | 2023.07.27 |
This ใป ๋ธ๋ผ์ฐ์ ์ ์ฅ์ (0) | 2023.07.26 |
HTTP ใป Position (0) | 2023.07.25 |