์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- ์๋ฐ์คํฌ๋ฆฝํธ
- ์ฑ
- ๋ฐ์ํ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ํ๋ก๊ทธ๋๋ฐ
- ์นํผ๋ธ๋ฆฌ์ฑ
- ๋ ์
- Java
- ๊น๋ฏธ๊ฒฝ์๋งํ์์
- ์ปดํจํฐ๊ณผํ
- Python
- ํ์ด์ฌ
- ์นํ์ด์ง๋ง๋ค๊ธฐ
- ๊ฐ๋ฐ
- ๋ฆฌ์กํธ
- database
- K๋ฐฐํฐ๋ฆฌ๋ ๋ณผ๋ฃจ์
- ์ฝ๋ฉ
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- ๋ผํ๋ผ์ค์๋ง๋
- ComputerScience
- ์ค๋ธ์
- ์ค๋ผํด
- ์ํ
- ๋ง์ผ๋ด๊ฐ์ธ์์๋ค์์ฐ๋ค๋ฉด
- ์๋ฐ
- JavaScript
- html
- css
- K๋ฐฐํฐ๋ฆฌ
- Today
- Total
JiYoung Dev ๐ฅ
[React] useRef (2023.05.24) ๋ณธ๋ฌธ
useRef
๐ useRef ์์
์๊ฒ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ์ฌ๊ฐํ์ ํฌ๊ธฐ๊ฐ ์๊ฒ, ์๋ณธ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ์๋ณธ ํฌ๊ธฐ๋ก, ํฌ๊ฒ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ์ฌ๊ฐํ์ ํฌ๊ธฐ๊ฐ ํฌ๊ฒ ๋ณํ๊ฒ ๋ง๋ค๊ธฐ
๐ ์๋ฐ์คํฌ๋ฆฝํธ
์๋ฐ์คํฌ๋ฆฝํธ์์๋ ์ด ๋ฌธ์ ๋ฅผ ํ๊ธฐ์ํด ์ฌ๊ฐํ ์์์ ์ ๊ทผํ๊ธฐ ์ํด์ document์ ์ ๊ทผํด์ผ ํ์
์ฌ๊ฐํ ์์ :
<div id = "box"></div>
์๋ฐ์คํฌ๋ฆฝํธ๋ก id๊ฐ box์ธ ์์์ ์ ๊ทผํ๊ธฐ :
document.getElementById('box").style.width= 100px
๐ ๋ฆฌ์กํธ์์ ๋ณ๊ฒฝ์ํค๋ ค๋ฉด?
DOM์ผ๋ก ๋ง์ฐฌ๊ฐ์ง๋ก ์ ๊ทผํด์ผํจ
useRef ์ฌ์ฉ
usdRef : ํน์ DOM ์์์ ์ ๊ทผํ๊ณ ์ถ์ ๋ ์ฌ์ฉ
- ๋ฐ๋๋ผJS์์๋ getElementById, querySelector ๋ฑ์ ์ฌ์ฉํ์ฌ ํน์ DOM ์์์ ์ ๊ทผํ์์
- React๋ฅผ ์ฌ์ฉํ ๋ ํน์ DOM ์์์ ์ง์ ์ ๊ทผํด์ผ ํ๋ ์ผ์ด ๋ฐ์ํ ์ ์์
ex. ํฌ์ปค์ฑ ์์ , ์์ฑ ๋ณ๊ฒฝ ๋ฑ
>> useRef๋ผ๋ react Hook์ ์ฌ์ฉ
โ๏ธ useRef ์ฌ์ฉํ๊ธฐ
์์์ useRef ์ ์
const useRefName = useRef();
DOM์ ์ ๊ทผํ๊ณ ์ ํ๋ ์์(ํ๊ทธ)์ ref = {useRef๋ช } ์์ฑ์ผ๋ก ์ถ๊ฐ
<div id="box" ref={useRefName}>
DOM์ ์ ๊ทผํ์ฌ ์์ฑ ๋ฐ๊พธ๊ธฐ
=> useRef๋ช .current...
ex. input ํ๊ทธ์ ์ ๋ ฅ๊ฐ์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ : useRefName.current.value
img ํ๊ทธ์ ๊ฒฝ๋ก ์ ๊ทผํ๋ ๋ฐฉ๋ฒ : useRefName.current.src
useRefName.current.style.width = "100px"
import React, { useRef } from "react";
import Ex05ButtonList from "./components/Ex05ButtonList";
const Ex05 = () => {
/* usdRef : ํน์ DOM ์์์ ์ ๊ทผํ๊ณ ์ถ์ ๋ ์ฌ์ฉ
- ๋ฐ๋๋ผJS์์๋ getElementById, querySelector ๋ฑ์ ์ฌ์ฉํ์ฌ ํน์ DOM ์์์ ์ ๊ทผํ์์
- React๋ฅผ ์ฌ์ฉํ ๋ ํน์ DOM ์์์ ์ง์ ์ ๊ทผํด์ผ ํ๋ ์ผ์ด ๋ฐ์ํ ์ ์์
ex. ํฌ์ปค์ฑ ์์
, ์์ฑ ๋ณ๊ฒฝ ๋ฑ
>> useRef๋ผ๋ react Hook์ ์ฌ์ฉํ ๊ฒ
*/
//divRef๋ผ๋ ์ด๋ฆ์ผ๋ก DOM ์์๋ฅผ ๊ฐ์ ธ์จ ๊ฒ
const divRef = useRef();
const changeSize = (size) => {
/** div์ ์ฌ์ด์ฆ๋ฅผ ์กฐ์ ํ๋ ์ฝ๋ */
divRef.current.style.width = `${size}px`;
divRef.current.style.height = `${size}px`;
};
const chBox = (e) => {
console.log("change Box Fuction", e.target.innerText);
// console.log("divRef : ", divRef.current.style.width);
if (e.target.innerText == "์๊ฒ") {
changeSize(100);
} else if (e.target.innerText == "์๋ณธ") {
changeSize(159);
} else {
changeSize(200);
}
};
return (
<div>
<Ex05ButtonList chBox={chBox} />
<div
ref={divRef}
style={{ backgroundColor: "skyblue", width: "150px", height: "150px" }}
></div>
</div>
);
};
export default Ex05;
๐ useRef ์ค์ต 1
๋ณ๊ฒฝ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ํ์ต์๋ฃ pdf ํ์ผ 1์์ 2๋ก ๋ณ๊ฒฝํ๊ธฐ
useRef๋ฅผ ์ด์ฉํด์ pdf1 ๋ทฐ์ด๋ฅผ pdf2๊ฐ ๋ณด์ด๋๋ก ํ ๊ฒ
๋จ, state ์ฌ์ฉ ๊ธ์ง
'/pdf/pdf1.pdf'
>> "http://localhost:3000/pdf/pdf1.pdf"
import React, { useRef } from "react";
const Ex06 = () => {
const iframeRef = useRef();
let pdfStyle = {
// ๋๋ฅผ ๊ฐ์ธ๊ณ ์๋ ๋ถ๋ชจ๋ฅผ ๊ธฐ์ค์ผ๋ก 100% (div - ๊ฐ๋กํ์ค)
width: "100%",
height: "90%",
};
const chPdf = () => {
console.log("chPdf", iframeRef.current.src);
iframeRef.current.src == "http://localhost:3000/pdf/pdf1.pdf"
? (iframeRef.current.src = "http://localhost:3000/pdf/pdf2.pdf")
: (iframeRef.current.src = "http://localhost:3000/pdf/pdf1.pdf");
};
return (
// vh : ๋ด ๋์ ๋ณด์ด๋ ๊ธฐ์ค
<div style={{ height: "100vh" }}>
<h3>
์ค๋์ ํ์ต์๋ฃ
<button onClick={chPdf}>๋ณ๊ฒฝ</button>
</h3>
<iframe ref={iframeRef} style={pdfStyle} src="/pdf/pdf1.pdf"></iframe>
</div>
);
};
export default Ex06;
๐ useRef ์ค์ต 2
ํ์ํฌ๋ฅผ ์ ๋ ฅํ๊ณ ๋ณ๊ฒฝ ํด๋ฆญํ๋ฉด ์ฌ์ง ๋ณ๊ฒฝ ํ input ํ๊ทธ์ ํฌ์ปค์ฑ
import React, { useRef } from "react";
const Ex07 = () => {
/**
1) ์ฌ์ฉ์๊ฐ input ํ๊ทธ ์์ ์
๋ ฅํ ๊ฐ์ ๊ฐ์ ธ์ค๊ธฐ
2) ๊ทธ ๊ฐ์ ๋ฐ๋ผ์ ์ฌ์ง์ src ์์ฑ์ ๋ณ๊ฒฝํ๊ธฐ
*/
const inputRef = useRef();
const imgRef = useRef();
const chPic = () => {
if (inputRef.current.value == "ํ์ํฌ") {
imgRef.current.src =
"https://file.mk.co.kr/meet/neds/2021/10/image_readtop_2021_1006877_16351128614821782.jpg";
} else {
imgRef.current.src =
"https://cdn.hankooki.com/news/photo/202301/47163_63325_1673949170.jpg";
}
inputRef.current.value = "";
inputRef.current.focus();
};
return (
<div>
<p>ํฌ๋งํ๋ ์ฌ์ง์ด ์์ผ์ ๊ฐ์?</p>
<input ref={inputRef} type="text" />
<button onClick={chPic}>๋ณ๊ฒฝ!</button>
<div>
<img
ref={imgRef}
src="https://cdn.hankooki.com/news/photo/202301/47163_63325_1673949170.jpg"
width="300px"
></img>
</div>
</div>
);
};
export default Ex07;
'full stack > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] ์ฐธ์ฐธ์ฐธ ๊ฒ์ ๋ง๋ค๊ธฐ (2023.05.26) (0) | 2023.05.29 |
---|---|
[React] Lifecycle (2023.05.24) (0) | 2023.05.24 |
[React] To-do List ๋ง๋ค๊ธฐ (2023.05.23) (0) | 2023.05.24 |
[React] context API (2023.05.22) (0) | 2023.05.22 |
[React] React ๋ณต์ต (๊ฐ๋ ~ context API๊น์ง) (2023.05.22) (0) | 2023.05.22 |