์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- REACT
- Flutter
- ์คํธ๋ฆผ๋ฆฟ
- ์๋ฐ๊ณต๋ถ
- ์๋ฐ
- ์๋๋ก์ด๋ ์คํ๋์ค
- MySQL
- ์๋ฐ๊ธฐ์ด
- Android
- ์๋ฐ์ด๋ณด
- Streamlit๊ธฐ์ด
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ํ๋ค์ค
- java
- ์๋ฐ์คํฌ๋ฆฝํธ ๊ณต๋ถ
- ํ์ด์ฌ
- db
- ์น๋์๋ณด๋ ์ ์
- serverless
- streamlit
- ์คํธ๋ฆผ๋ฆฟ ๊ธฐ๋ณธ
- RESTful API
- ์๋ฐ์คํฌ๋ฆฝํธ
- ํ๋ค์ค๊ณต๋ถ
- ์๋ฐํ๋ก๊ทธ๋๋ฐ
- Pandas
- JavaScript
- ์น๋์๋ณด๋ ๊ธฐ์ด
- ์๋๋ก์ด๋ ์ฑ ๊ฐ๋ฐ
- ํ์ด์ฌ๊ณต๋ถ
- Today
- Total
ruriruriya
[React] ๋ฆฌ์กํธ - ๊ฐ์ฒด(Object)๋? ๋ณธ๋ฌธ

React์์ **๊ฐ์ฒด(Object)**๋ ์ํ(state)๋ props๋ฅผ ๊ด๋ฆฌํ ๋ ์์ฃผ ์ฌ์ฉ๋๋ค. ๊ฐ์ฒด๋ ์ฌ๋ฌ ๊ฐ์ ์์ฑ์ ํฌํจํ ์ ์์ผ๋ฉฐ, ๋ถ๋ณ์ฑ์ ์ ์งํ๋ ๊ฒ์ด ์ค์ํ๋ค. React์์ ๊ฐ์ฒด๋ฅผ ๋ค๋ฃฐ ๋ ์ฃผ์ํด์ผ ํ ์ ๊ณผ ์ฌ๋ฐ๋ฅธ ์ฌ์ฉ๋ฒ์ ์ ๋ฆฌํด๋ณธ๋ค.
1๏ธโฃ ๊ฐ์ฒด(Object)๋?
๊ฐ์ฒด๋ ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ ํ๋์ ๊ตฌ์กฐ๋ก ๋ฌถ์ด ๊ด๋ฆฌํ ์ ์๋ ์๋ฃํ์ด๋ค. JavaScript์์๋ {}(์ค๊ดํธ)๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์๋ค.
const user = {
name: "์ฒ ์",
age: 25,
isAdmin: false
};
- user๋ผ๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , name, age, isAdmin์ด๋ผ๋ ์์ฑ์ ๊ฐ์ง๋ค.
- ์์ฑ ๊ฐ์ ๋ฌธ์์ด, ์ซ์, ๋ถ๋ฆฌ์ธ ๋ฑ ๋ค์ํ ๋ฐ์ดํฐ ํ์ ์ด ๋ ์ ์๋ค.
2๏ธโฃ React์์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ์ด์
React์์๋ ์ํ(state)๋ props๋ฅผ ๊ด๋ฆฌํ ๋ **๋จ์ผ ๊ฐ(primitive value)**๋ฟ๋ง ์๋๋ผ, ๊ฐ์ฒด ํํ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์๋ ์๋ค.
const [user, setUser] = useState({ name: "์ฒ ์", age: 25 });
- useState๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด ํํ์ ์ํ๋ฅผ ๊ด๋ฆฌํ ์ ์๋ค.
- ์ฌ๋ฌ ๊ฐ์ ๊ด๋ จ๋ ๊ฐ์ ํ๋์ ๊ฐ์ฒด๋ก ๋ฌถ์ด ๊ด๋ฆฌํ๋ฉด ์ฝ๋๊ฐ ๋ ์ง๊ด์ ์ด๊ณ ์ ์ง๋ณด์๊ฐ ์ฌ์์ง๋ค.
3๏ธโฃ ๊ฐ์ฒด ์ํ๋ฅผ ๋ณ๊ฒฝํ ๋ ์ฃผ์ํ ์
โ ๊ฐ์ฒด๋ฅผ ์ง์ ์์ ํ๋ฉด ์ ๋๋ค
React์์ ์ํ(state)๋ ๋ถ๋ณ์ฑ(immutability)์ ์ ์งํด์ผ ํ๋ค. ์ฆ, ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ์ง์ ๋ณ๊ฒฝํ๋ฉด ์ ๋๋ค.
โ ์๋ชป๋ ์์ (์ง์ ๊ฐ์ฒด ๋ณ๊ฒฝ)
function Profile() {
const [user, setUser] = useState({ name: "์ฒ ์", age: 25 });
function updateAge() {
user.age += 1; // โ ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ์ง์ ์์
setUser(user); // โ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ๋ค์ ์ค์
}
return (
<div>
<p>์ด๋ฆ: {user.name}</p>
<p>๋์ด: {user.age}</p>
<button onClick={updateAge}>๋์ด ์ฆ๊ฐ</button>
</div>
);
}
์ด ์ฝ๋์ ๋ฌธ์ ์
- user.age += 1;๋ก ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ์ง์ ์์ ํ๋ค.
- setUser(user);๋ฅผ ํธ์ถํ์ง๋ง React๋ ๊ฐ์ฒด์ ์ฐธ์กฐ๊ฐ์ด ๋์ผํ๊ธฐ ๋๋ฌธ์ ๋ณ๊ฒฝ์ ๊ฐ์งํ์ง ๋ชปํ๋ค.
- ๋ฒํผ์ ํด๋ฆญํด๋ UI๊ฐ ์ ๋ฐ์ดํธ๋์ง ์๋๋ค.
โ ์ฌ๋ฐ๋ฅธ ์์ (์๋ก์ด ๊ฐ์ฒด ์์ฑ)
function Profile() {
const [user, setUser] = useState({ name: "์ฒ ์", age: 25 });
function updateAge() {
setUser({ ...user, age: user.age + 1 }); // โ
์๋ก์ด ๊ฐ์ฒด ์์ฑ
}
return (
<div>
<p>์ด๋ฆ: {user.name}</p>
<p>๋์ด: {user.age}</p>
<button onClick={updateAge}>๋์ด ์ฆ๊ฐ</button>
</div>
);
}
์ ์ด ๋ฐฉ์์ด ์ฌ๋ฐ๋ฅธ๊ฐ?
- setUser({ ...user, age: user.age + 1 })๋ฅผ ์ฌ์ฉํ์ฌ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
- React๋ ์๋ก์ด ๊ฐ์ฒด๊ฐ ๋ค์ด์ค๋ฉด ์ฐธ์กฐ๊ฐ์ด ๋ณ๊ฒฝ๋์์์ ๊ฐ์งํ๊ณ , UI๋ฅผ ๋ค์ ๋ ๋๋งํ๋ค.
4๏ธโฃ ๊ฐ์ฒด๋ฅผ ์๋ก์ด ๊ฐ์ผ๋ก ์ ๋ฐ์ดํธํ๋ ๋ฐฉ๋ฒ
React์์ ๊ฐ์ฒด ์ํ๋ฅผ ๋ณ๊ฒฝํ ๋๋ ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํ ํ, ๋ณ๊ฒฝ๋ ๊ฐ๋ง ์ ๋ฐ์ดํธํด์ผ ํ๋ค.
โ ๊ฐ์ฒด ๋ฆฌํฐ๋ด ๋ฐฉ์
setState({ count: state.count + 1 });
- {}๋ฅผ ์ฌ์ฉํ์ฌ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
- ๊ธฐ์กด ์ํ์ ์๊ด์์ด ์๋ก์ด ๊ฐ์ฒด๋ฅผ ํ ๋นํ๋ ๊ฒฝ์ฐ์ ์ ํฉํ๋ค.
โ ์ ๊ฐ ์ฐ์ฐ์(Spread Operator) ์ฌ์ฉ
setState({ ...state, count: state.count + 1 });
- ...state๋ฅผ ์ฌ์ฉํ๋ฉด ๊ธฐ์กด ๊ฐ์ฒด์ ์์ฑ์ ๋ณต์ฌํ๋ฉด์, ํน์ ์์ฑ๋ง ๋ณ๊ฒฝํ ์ ์๋ค.
- ๊ธฐ์กด ์ํ๋ฅผ ์ ์งํ๋ฉด์ ์ผ๋ถ ์์ฑ๋ง ์ ๋ฐ์ดํธํ ๋ ์ ์ฉํ๋ค.
๐ก ์์
const [user, setUser] = useState({ name: "์ฒ ์", age: 25 });
setUser({ ...user, age: 26 }); // โ
๊ธฐ์กด name ์์ฑ์ ์ ์ง๋๊ณ age๋ง ๋ณ๊ฒฝ๋จ
5๏ธโฃ React์์ ๊ฐ์ฒด๋ฅผ ๋ค๋ฃฐ ๋ ์ฃผ์ํด์ผ ํ ์
1๏ธโฃ ๋ถ๋ณ์ฑ์ ์ ์งํด์ผ ํ๋ค
- ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ์ง์ ์์ ํ๋ฉด React๊ฐ ๋ณ๊ฒฝ์ ๊ฐ์งํ์ง ๋ชปํ๋ค.
- ํญ์ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด setState()์ ์ ๋ฌํด์ผ ํ๋ค.
2๏ธโฃ ๊ฐ์ฒด ์ํ๋ฅผ ๋ณ๊ฒฝํ ๋๋ ... ์ ๊ฐ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค
- setState({ ...state, ๋ณ๊ฒฝํ ๊ฐ }) ํํ๋ก ์ฌ์ฉํ๋ฉด ๊ฐ๋ ์ฑ์ด ์ข๊ณ ์ ์ง๋ณด์๊ฐ ์ฝ๋ค.
3๏ธโฃ ์ด์ ์ํ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ๋ฐ์ดํธํ ๊ฒฝ์ฐ prevState๋ฅผ ํ์ฉํด์ผ ํ๋ค
setState(prevState => ({ ...prevState, count: prevState.count + 1 }));
- ์ํ๊ฐ ๋น๋๊ธฐ์ ์ผ๋ก ๋ณ๊ฒฝ๋ ๋ prevState๋ฅผ ์ฌ์ฉํ๋ฉด ์์ ํ๊ฒ ์ ๋ฐ์ดํธํ ์ ์๋ค.
6๏ธโฃ ์ ๋ฆฌ
โ React์์ ๊ฐ์ฒด๋ฅผ ์ํ(state)๋ก ์ฌ์ฉํ ์ ์๋ค.
โ ๊ฐ์ฒด ์ํ๋ฅผ ๋ณ๊ฒฝํ ๋๋ ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ์ง์ ์์ ํ๋ฉด ์ ๋๋ค.
โ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ setState()์ ์ ๋ฌํด์ผ React๊ฐ ๋ณ๊ฒฝ์ ๊ฐ์งํ ์ ์๋ค.
โ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ
- { ...state, ๋ณ๊ฒฝํ ์์ฑ } (์ ๊ฐ ์ฐ์ฐ์)
- Object.assign({}, state, ๋ณ๊ฒฝํ ์์ฑ)
โ ๊ฐ์ฒด์ ๊ธฐ๋ณธ ๊ฐ(Primitive Value)์ ์ํ ๋ณ๊ฒฝ ๋ฐฉ์์ด ๋ค๋ฅด๋ค.
โ ๋ถ๋ณ์ฑ์ ์ ์งํ๋ ๊ฒ์ด React์ ์ํํ ์ํ ๊ด๋ฆฌ๋ฅผ ์ํด ์ค์ํ๋ค.