-
Notifications
You must be signed in to change notification settings - Fork 7
State, Rerendering, Shallow Compare
https://github.com/boostcampwm-2021/web09-Duxcord/commit/c0ed2fb9214db122e93d09a033c6ae2a234f1170
client/src/components/Chat/index.tsx
์ 61-62์ค
object, array์ ๊ฐ๊ณ ๋ค๋ฆ์ ๋น๊ตํ ๋ attribute๋ฅผ ๋น๊ตํ์ง ์๊ณ reference๋ง ๋น๊ตํ๋ ๋ฐฉ์
๊ฐ์ ๊ฐ์ด ๋ค์ด์๋ object๋ reference๊ฐ ๋ค๋ฅด๋ฉด ๋ค๋ฅด๊ฒ ์ธ์ํ๋ฉฐ,
๋ค๋ฅธ ๊ฐ์ด ๋ค์ด์๋ object๋ reference๊ฐ ๊ฐ์ผ๋ฉด ๊ฐ๊ฒ ์ธ์ํ๋ค.
๋ฆฌ๋ ๋๋ง์ด ๋ฐ์ํ๋ ์์ ๋ค์ฏ ๊ฐ์ง!
- state ๋ณ๊ฒฝ์ด ์์ ๋
- ๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง๋์ด props๊ฐ ๋ณ๊ฒฝ๋ ๋
- ์๋ก์ด props์ด ๋ค์ด์ฌ ๋
- shouldComponentUpdate์์ true๊ฐ ๋ฐํ๋ ๋
- forceUpdate๊ฐ ์คํ๋ ๋
์ด ๋ 1,2์ ๊ฒฝ์ฐ ๋ณ๊ฒฝ์ด ์๋ค๋๊ฑธ ๊ฐ์งํ๋ ๋ฐฉ๋ฒ์ ์์ Shallow Compare์ด๋ค. ์๋๋ ๋ฆฌ์กํธ ๊ณต์ ๋ฌธ์์์์ ์ค๋ช ์ด๋ค.
๋ ์ ํํ๊ฒ๋ Object.is ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์์ ๋น๊ต๋ฅผ ์คํํ๋ค.
const [todos, setTodos] = useState([])
const updateTodos = (newTodo:string) => {
// 1
setState((prev)=>{
prev.unshift(newTodo)
return prev
})
// 2
setState((prev)=>{
return [...prev, newTodo]
})
}
1์ ๊ฒฝ์ฐ, ์ state๋ก ์ค์ ๋ ๊ฐ์ ๋ด์ฉ์ด ๋ฐ๋์์ง๋ง ์ฐธ์กฐ๊ฐ ๋ฐ๋์ง ์์์ผ๋ฏ๋ก ๋ฆฌ๋ ๋๋ง์ด ์ผ์ด๋์ง ์๋๋ค
2์ ๊ฒฝ์ฐ, ์ state๋ก ์ค์ ๋ ๊ฐ์ ์ฐธ์กฐ๊ฐ ๋ฐ๋์์ผ๋ฏ๋ก ๋ฆฌ๋ ๋๋ง์ด ์ผ์ด๋๋ค.
setState
๋ฟ๋ง ์๋๋ผ
SWR์ mutate()
๋ํ data๊ฐ์ ์
๋ฐ์ดํธํ ๋ Shallow Compare์ ์ฌ์ฉํ๋ค(๊ณ ์ถ์ ๋๋ค).
๋ฐ๋ผ์ ์ํ๋ฅผ updateํ ๋๋ ๊ฐ์ ์ฐธ์กฐ๋ฅผ ๊ฐ์ง ๊ฑธ๋ก ์ ๋ฐ์ดํธํ๋ฉด ์๋๋ค!!!
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Object/is
๐ฆ Duxcord ๐ฆ
- ๐ ํ ์คํธ ์ฝ๋ ์์ฑ๋ฒ
- ๐ setState, mutate ์ ์ฃผ์์ฌํญ
- ๐ nCloud 1ํ: Object Storage ์ฌ์ฉ๊ธฐ
- โ๏ธ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ๋ถ๋ถ์ ์ผ๋ก ๋์ ํ๊ธฐ
- ๐ nCloud 2ํ: pre-signed url ์ ์ฉํ๊ธฐ
- ๐ ์ํฅ๊ณ๋ฅผ ์ด์ฉํ ์ฌ์ฉ์ ๋ณผ๋ฅจ ์ธก์
- ๐ ๋ฐ๊ฐ๋ฃจ๋ถํฐ ๋ฐ์ฃฝํด์ ํ ์คํธ ๋ง๋ค๊ธฐ
- โจ ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์์ญ๋๊น?
- ๐ฆท ์ธ๊ณ๊ด ์ต๊ฐ ์ฌ๊ณจ: ๋ชจ๋ฌ ๋ง๋ค๊ธฐ
- ๐ธ ์ธ์ ๋ค์ปท ๊ธฐ๋ฅ ๋ง๋ค๊ธฐ
- ๐ ํ์ ํ์ ๊ตฌํ์ ์ํ WebRTC ์ฐ๊ฒฐ ๋ฐฉ์ ์ ์
- โจ ์ค์๊ฐ ์ฑํ ๊ตฌํ ๋ฐฉ์์ ๋ํ ๊ณ ๋ฏผ