728x90
๋ฐ์ํ
๐ก ์ค์ต ํฌ์ธํธ!
๐ ์ฒซ๋ฒ์งธ ๊ธ์ ๋ชฉ ๋ฐ๊พธ๊ธฐ ๋ฒํผ ๋ฐ ๊ธฐ๋ฅ ๋ง๋ค๊ธฐ
๐ ๊ฐ๋๋ค์์ผ๋ก ์ ๋ ฌํ๊ธฐ ๋ฒํผ ๋ฐ ๊ธฐ๋ฅ ๋ง๋ค๊ธฐ
๐ ์ฒซ๋ฒ์งธ ๊ธ์ ๋ชฉ ๋ฐ๊พธ๊ธฐ ๋ฒํผ ๋ฐ ๊ธฐ๋ฅ ๋ง๋ค๊ธฐ
let [title, setTitle] = useState([
'[React] React ์ค์น์ ๊ฐ๋ฐํ๊ฒฝ ์
ํ
ํ๊ธฐ',
'[React] JSX ๋ฅผ ์ด์ฉํด HTML ํ์ด์ง ์ ์ํด๋ณด๊ธฐ',
'[React] React ์์ state ๋ณ๊ฒฝํด๋ณด๊ธฐ'
]);
- ๋ณธ๊ฒฉ์ ์ผ๋ก ๊ธฐ๋ฅ์ ๋ง๋ค์ด๋ณด๊ธฐ ์ ์ ๊ธฐ์กด์ useState() ํจ์๋ฅผ ์ดํด๋ณด์๋ฉด ์์ ๊ฐ๋ค.
๐ค ์ฒซ๋ฒ์งธ ๊ธ์ ๋ชฉ ๋ฐ๊พธ๊ธฐ ๋ฒํผ ๋ง๋ค๊ธฐ
<button onClick={ changeTitle0 }>์ฒซ๋ฒ์งธ ๊ธ์ ๋ชฉ ๋ฐ๊พธ๊ธฐ</button>
- ์ ๋นํ ์์น์ "์ฒซ๋ฒ์งธ ๊ธ์ ๋ชฉ ๋ฐ๊พธ๊ธฐ" ๋ผ๋ ๋ฒํผ์ ๋ง๋ค์ด์ฃผ์๋ค.
- onClick ๋ด์ ํจ์ ์ฝ๋๋ฅผ ์ ๊ธฐ์๋ ์ฝ๋๊ฐ ๊ธธ์ด์ changeTitle0 ํจ์๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด์ ๋ฃ์ด์ฃผ๊ธฐ๋ก ํ๋ค.
๐ค ์ฒซ๋ฒ์งธ ๊ธ์ ๋ชฉ ๋ฐ๊พธ๊ธฐ ๋ฒํผ ๊ธฐ๋ฅ ๋ง๋ค๊ธฐ
function changeTitle0() {
setTitle([
'[React] React ์ค์น ๋ฐ ๊ฐ๋ฐํ๊ฒฝ ์
ํ
์๋ฃ',
'[React] JSX ๋ฅผ ์ด์ฉํด HTML ํ์ด์ง ์ ์ํด๋ณด๊ธฐ',
'[React] React ์์ state ๋ณ๊ฒฝํด๋ณด๊ธฐ'
])
}
- React ์์ state ๋ ์ง์ ๊ฐ์ ๋ณ๊ฒฝํ๋ ๋ฐฉ์์ ์ง์ํ๋ค. (๊ทธ๋์ state ๊ฐ์ ๋ณ๊ฒฝํ๋ ํจ์๊ฐ ๋ฐ๋ก ์กด์ฌํ๋ ๊ฒ!)
- ํ์ง๋ง ๊ทธ๋ ๋ค๊ณ ํด์ ์์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ์ฌ์ฉ์ ๊ฐ๋ฅํ์ง๋ง, ์ฝ๋ ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๊ณ ๋นํจ์จ์ ์ด๋ค.
function changeTitle0() {
// title[0] = '[React] React ์ค์น ๋ฐ ๊ฐ๋ฐํ๊ฒฝ ์
ํ
์๋ฃ' ์ ๊ฐ์ด state ๋ฅผ ์ง์ ์์ ๋ถ๊ฐ
let newTitle = [...title]; // ! array, object deep copy ํ๋ ๋ฐฉ๋ฒ!
newTitle[0] = '[React] React ์ค์น ๋ฐ ๊ฐ๋ฐํ๊ฒฝ ์
ํ
์๋ฃ'
setTitle(newTitle);
}
- ๋ฐ๋ผ์ ์์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ ํด์ฃผ์๋ค.
- ๋จผ์ , title ์ด๋ผ๋ state ๋ ์์์๋ ์ธ๊ธํ๋ค์ํผ ์ง์ ์์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ณต์ฌ๋ณธ์ด ํ์ํ๋ค.
- ๊ทธ๋์ title ์ด๋ผ๋ state ๋ฅผ deep copy ํ ๋ณต์ฌ๋ณธ์ newTitle ์ด๋ผ๋ ๋ณ์์ ์ ์ฅํด์ฃผ์๋ค.
- ๋ณต์ฌ๋ณธ์ธ newTitle ์ 0๋ฒ์งธ ๋ฐ์ดํฐ๋ฅผ '[React] React ์ค์น ๋ฐ ๊ฐ๋ฐํ๊ฒฝ ์ ํ ์๋ฃ' ๋ผ๋ ๋ด์ฉ์ผ๋ก ๋ณ๊ฒฝํด์ฃผ์๋ค.
- ๊ทธ๋ฆฌ๊ณ ๋ณต์ฌ๋ณธ์ธ newTitle ์ setTitle() ํจ์ ์์ ๋ฃ์ด์ title state ๋ฅผ ๋ณ๊ฒฝํด์ฃผ์๋ค.
- ์ฌ๊ธฐ์ ์ค์ํ ์ ์ ๋ณ์์ ์ ์ฅ๋ ์๋ฃํ์ด ์ฐธ์กฐ์๋ฃํ(array, object)์ผ ๋ ๋ณต์ฌ๋ฅผ ํ๋ ๋ฐฉ๋ฒ์ ๊ดํ ๊ฒ์ด๋ค.
// ๋ณต์ฌํ๋ ค๋ ๋ฐ์ดํฐ๊ฐ ์์์๋ฃํ(array, object ๋ฅผ ์ ์ธํ ์๋ฃํ)์ผ ๋
// ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ๋ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ๋ค.
let a = 10;
let b = a;
a = 20;
console.log(b); // b ๋ a ์ ๋ณต์ฌ๋ณธ์ผ๋ก 10 ์ด ๋จ
// ๋ณต์ฌํ๋ ค๋ ๋ฐ์ดํฐ๊ฐ ์ฐธ์กฐ์๋ฃํ(array, object)์ผ ๋
// ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ๋ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ ๋ ๊ฐ์ง๊ฐ ์๋ค. (์์ ๋ณต์ฌ, ๊น์ ๋ณต์ฌ)
// ์์ ๋ณต์ฌ์ ๊ฒฝ์ฐ ๊ฐ์ ๊ณต์ ํ๋ฏ๋ก ๋ณต์ฌ๋ณธ์ด ๋ณ๊ฒฝ๋๋ฉด ์๋ณธ์ด ๊ฐ์ด ๋ณ๊ฒฝ๋๋ค.
// ๊น์ ๋ณต์ฌ์ ๊ฒฝ์ฐ ์ผ๋ฐ์ ์ผ๋ก ์๊ณ ์๋ ํํ์ ์์ ํ ์๋ก์ด ๋ณต์ฌ๋ณธ์ด ์์ฑ๋๋ค.
let a = [1,2,3];
let b = a;
b[0] = 2;
console.log(b); // b ๋ [2,2,3] ์ด ๋จ
console.log(a); // ์๋ณธ a ๋ b ์ ๊ฐ์ ๊ณต์ ํ๋ฏ๋ก b ์ ๋์ผํ๊ฒ [2,2,3] ์ด ๋จ
let a = [1,2,3];
let b = [...a]; // ... ์ spread ์ฐ์ฐ์!
a = [2,4,6];
console.log(b); // b ๋ a ์ ๊น์ ๋ณต์ฌ๋ณธ์ ํด๋นํ๋ฏ๋ก [1,2,3] ์ด ๋จ
๐ ๊ฐ๋๋ค์์ผ๋ก ์ ๋ ฌํ๊ธฐ ๋ฒํผ ๋ฐ ๊ธฐ๋ฅ ๋ง๋ค๊ธฐ
- ๊ฐ์ฌ๋์ด React ์์ state ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ์ ํ์ฉํ์ฌ ๋ฒํผ์ ๋๋ ์ ๋ ๊ธ์ ๋ชฉ๋ค์ด ๊ฐ๋๋ค์์ผ๋ก ์ ๋ ฌ์ด ๋๋๋ก ๊ธฐ๋ฅ์ ๋ง๋ค์ด๋ณด๋ผ๊ณ ํ์ ์ ํด๋ณด์๋ค.
๐ค ๊ฐ๋๋ค์์ผ๋ก ์ ๋ ฌํ๊ธฐ ๋ฒํผ ๋ง๋ค๊ธฐ
<button onClick={ orderTitle }>๊ฐ๋๋ค์์ผ๋ก ์ ๋ ฌํ๊ธฐ</button>
- ์ ๋นํ ์์น์ "๊ฐ๋๋ค์์ผ๋ก ์ ๋ ฌํ๊ธฐ" ๋ผ๋ ๋ฒํผ์ ๋ง๋ค์ด์ฃผ์๋ค.
- onClick ๋ด์ ํจ์ ์ฝ๋๋ฅผ ์ ๊ธฐ์๋ ์ฝ๋๊ฐ ๊ธธ์ด์ orderTitle0 ํจ์๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด์ ๋ฃ์ด์ฃผ๊ธฐ๋ก ํ๋ค.
๐ค ๊ฐ๋๋ค์์ผ๋ก ์ ๋ ฌํ๊ธฐ ๋ฒํผ ๊ธฐ๋ฅ ๋ง๋ค๊ธฐ
function orderTitle() {
let newOrder = [...title].sort();
setTitle(newOrder);
}
- title state ๋ฅผ deep copy ํ ๋ณต์ฌ๋ณธ์ ๋ง๋ค์ด์ newOrder ๋ผ๋ ๋ณ์์ ์ ์ฅํด์ฃผ์๋ค.
- .sort() ํจ์๋ฅผ ํ์ฉํ๋ฉด ๋ฌธ์์ด ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ ์ ์๋ค.
- ๊ทธ๋ฆฌ๊ณ ๋ณต์ฌ๋ณธ์ธ newOrder ๋ฅผ setTitle() ํจ์ ์์ ๋ฃ์ด์ title state ๋ฅผ ๋ณ๊ฒฝํด์ฃผ์๋ค.
728x90
๋ฐ์ํ
'[๊ฐ๋ฐ] Practice > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] React ์์ ๋ฐ๋ณต๋ฌธ ํ์ฉํ๊ธฐ (0) | 2022.03.21 |
---|---|
[React] ํด๋ฆญํ๋ฉด ๋์ํ๋ UI (๋ชจ๋ฌ์ฐฝ) ๋ง๋ค์ด๋ณด๊ธฐ (0) | 2022.03.20 |
[React] React ์์ state ์ฌ์ฉํด๋ณด๊ธฐ (0) | 2022.03.18 |
[React] React ์์ Font Awesome ์ฌ์ฉํด๋ณด๊ธฐ (0) | 2022.03.18 |
[React] React ์ค์นํ๊ธฐ ๋ฐ ๊ฐ๋ฐํ๊ฒฝ ์ ํ ํ๊ธฐ (0) | 2022.03.18 |