๋ฌธ์๋ฅผ ์ฝ์์ผ๋ก์จ Redux๋ฅผ ์๊ฒ๋๊ณ ์ค์ ์์ ๋ฅผ ์์ ํ๊ธฐ ์์ํฉ๋๋ค. ์ ๊ฒฝ์ฐ์๋ GitHub HTTP API ํธ์ถ์ ์ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ๊ณ Repo ๋ฐ User ๊ฐ๋ ์ ์ ํ๊ฒฝ์์ ์ ์ฌํ ๊ฐ๋ ์ผ๋ก ๋ฐ๊ฟจ์ต๋๋ค. ์ง๊ธ๊น์ง ๋๋ฌด ๋ค๋ฅด๋ฉด ์๋์ฃ ?
์ฌ๊ธฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
๋ด API ํธ์ถ์ด ์ฑ๊ณตํ๊ณ ์๋ต JSON์ด camelCased ๋ฐ ์ ๊ทํ๋๊ณ _ํ์ง๋ง _ API ์์ฒญ์ด ์ฑ๊ณต์ ์ผ๋ก ๋ฐ์ํ ํ ๋ด ๊ตฌ์ฑ ์์๊ฐ ๋ค์ ๋ ๋๋ง๋์ง ์์ต๋๋ค. USER_REQUEST
๊ฐ ์ ๋ฌ๋๊ณ ์ฌ์ฉ์ ๊ตฌ์ฑ ์์๊ฐ "Loading ..."์ ํ์ํ๋๋ก ์
๋ฐ์ดํธ ๋ ์งํ USER_SUCCESS
๊ฐ ์ ๋ฌ๋๊ณ ๋ค์ ์ํ์ ์ฑ์์ง entities
ํค๊ฐ ํฌํจ๋ฉ๋๋ค.
๊ทธ๊ฒ์ ๋ฌธ์ ๊ฐ ๋ฏธ๋ค์จ์ด์ ์๋ค๋ ๊ฒ์ ์๋ฏธ ํ ๊ฒ์ ๋๋ค. ์์ ์ ์ํฐํฐ๋ฅผ ์ ์ฅ์์ ์ ์ฅํด์ผํ๋ฉฐ ๊ตฌ์ฑ ์์๋ ๋ณ๊ฒฝ ์ฌํญ์ ๊ด์ฐฐํ๊ณ ๋ค์ ๋ ๋๋งํด์ผํฉ๋๋ค. ์?
์ค์ ์์์ ์ฑ๊ณต์ ์ผ๋ก ๊ฒ์๋๊ณ ์ ๊ทํ ๋ ๋ฐ์ดํฐ๊ฐ _ ์ค์ ๋ก _ ์ ์ฅ์์ ์ ์ฅ๋๋ ์์น๋ ์ด๋์ ๋๊น? ๋๋ ๊ทธ๊ฒ์ด ์ด๋์์ ์ ๊ทํ๋๊ณ ์๋์ง๋ ์์ง๋ง, ๊ทธ ์ ๊ทํ์ ๊ฒฐ๊ณผ๊ฐ ์์ ์ผ๋ก ์ ๋ฌ๋๋ ์์น๋ ์ ์ ์์ต๋๋ค.
์ ๋ง ๊ณ ๋ง์!
๋ฆฌ๋์์ ์์ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ํตํด ์ ์ฅ์์์ ๋ฐ์ดํฐ๊ฐ ์ค์ / ์ ๋ฐ์ดํธ / ์ญ์ ๋ฉ๋๋ค. ๊ฐ์๊ธฐ๋ ์ฑ ์ฌ๋ผ์ด์ค์ ํ์ฌ ์ํ๋ฅผ ์์ ํ๊ณ ์๋ก์ด ์ํ๋ฅผ ๋ค์ ๊ฐ์ ธ์ฌ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค. ๊ตฌ์ฑ ์์๊ฐ ๋ค์ ๋ ๋๋ง๋์ง ์๋ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์ด์ ์ค ํ๋๋ ํ์ํ ๋ณ๊ฒฝ ์ฌํญ์ด ์ ์ฉ๋ ์ํ์ ์ ๋ณต์ฌ๋ณธ์ ๋ฐํํ๋ ๋์ ๊ฐ์๊ธฐ์์ ๊ธฐ์กด ์ํ๋ฅผ ์์ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค ( ๋ฌธ์ ํด๊ฒฐ ์น์ ํ์ธ ). ๊ธฐ์กด ์ํ๋ฅผ ์ง์ ๋ณ๊ฒฝํ๋ฉด Redux๋ ์ํ ์ฐจ์ด๋ฅผ ๊ฐ์งํ์ง ์์ผ๋ฉฐ ์ ์ฅ์๊ฐ ๋ณ๊ฒฝ๋์์์ ๊ตฌ์ฑ ์์์ ์๋ฆฌ์ง ์์ต๋๋ค.
๋ฐ๋ผ์ ๊ฐ์๊ธฐ๋ฅผ ํ์ธํ๊ณ ๊ธฐ์กด ์ํ๋ฅผ ๋ณ๊ฒฝํ์ง ์๋์ง ํ์ธํฉ๋๋ค. ๋์์ด ๋์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
@ernieturner๋ ๋ง ์ธ์ ์๋์ง ํ์ธ mapStateToProps
๋น์ ์ ํจ์ connect(mapStateToProps)(YourConnectedComponent)
๊ธฐ๋ฅ์ ๊ตญ๊ฐ ๊ด๋ จ ๋งคํ (์ด ๊ฒฝ์ฐ entities
) ์ฐ๊ฒฐ๋ ๊ตฌ์ฑ ์์๊ฐ ๋ฃ๊ธฐ๋ ๊ทธ๋์ ์ํ์ ๊ทธ ์กฐ๊ฐ์.
๋ํ connect()
๋ ์์ ๋น๊ต๋ฅผ ์ํํฉ๋๋ค. https://github.com/rackt/react-redux/blob/d5bf492ee35ad1be8ffd5fa6be689cd74df3b41e/src/components/createConnect.js#L91
์ฐ๊ฒฐ๋ ์ํ์ ๋ชจ์์ด ๋ณ๊ฒฝ๋์ง ์์๊ธฐ ๋๋ฌธ์ ์ ๋ฐ์ดํธ๋ฅผ ์ํํ์ง ์๋ ๊ฒ์ผ๋ก ๊ฐ์ ํ ์ ์์ต๋๋ค.
์, ์์์ด! ๋ด mapStateToProps
์์ ์ํ์์ ๊ฐ์ฒด๋ฅผ ์ถ์ถํ๋ ค๊ณ ํ์ง๋ง ์ฌ๋ฐ๋ฅธ ํค๋ฅผ ์ง์ ํ์ง ์์์ต๋๋ค. entities.users[login]
๋ฅผ ์ถ์ถํ๋ ๋์ entities.users[id]
. entities.users
๊ฐ์ฒด๋ login
๋ฌธ์์ด๋ก ํค๊ฐ ์ง์ ๋์์ผ๋ฏ๋ก ์ซ์ id
๋ฅผ ์ฐพ์ ์ ์์ ๋ ์ค์ ๋ก ๋ณ๊ฒฝ๋ ์ํ์ด ์์ผ๋ฏ๋ก ๋ค์ ๋ ๋๋ง ํ ํ์๊ฐ ์์ต๋๋ค.
๋์ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค! ์๊ฐ์๋ด์ด ๋์ ์ฃผ์ ์ ์ ๋ง ๊ฐ์ฌํฉ๋๋ค.
๋ฟก๋ฟก
๋ง๋ ์ ๋ผ. connect()
๊ฐ์ ๋ณ๊ฒฝ ์ฌํญ์ ํ์ธํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์
๋๊น? ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ชจ๋ ๋ ๊น์ ์์ค์ ์ํ์ ๋ํด ์์ญ ๊ฐ์ ์ปจํ
์ด๋ ๊ตฌ์ฑ ์์๋ฅผ ๋ง๋ค์ด์ผํฉ๋๋ค. ์ ์์ด ์๋๋๋ค
ํฉ๋ฆฌ์ ์ธ ํฌ๊ธฐ์ ์ฑ์๋ ๋ฐ๋์ ๋ง์ ์ฐ๊ฒฐ๋ ๊ตฌ์ฑ ์์๊ฐ ์์ด์ผํฉ๋๋ค. ํ๋์ ์ต์์ ์ฐ๊ฒฐ ๊ตฌ์ฑ ์์๊ฐ์๋ ๊ฒฝ์ฐ ์ํ๊ฐ ์ ํ ๋ณ๊ฒฝ ๋ ๋๋ง๋ค ๋ถํ์ํ๊ฒ ์ฑ์ ๋ง์ ๋ถ๋ถ์ ๋ค์ ๋ ๋๋งํ๊ฒ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋น์ ์ react-redux์ ์ฃผ์ ์ต์ ํ ์ค ํ๋๋ฅผ ์ ๊ฑฐ ํ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ ๊ตฌ๋ ์ํ๊ฐ ๋ณ๊ฒฝ ๋ ๋๋ง ๋ค์ ๋ ๋๋งํ๋ ๊ฒ์ ๋๋ค.
๋ณต์กํ ์ํ ์ฟผ๋ฆฌ๋ฅผ ํ๊ฐํด์ผํ๋ ๊ฒฝ์ฐ reselect๋ฅผ ์ฌ์ฉํ์ฌ ์๋๋ฅผ ๋์ด์ญ์์ค.
ํธ์ ๋ด์ ๊ฐ๊ธฐ
๊น์ ๋น๊ต ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํธ๋ฆฌ์ ๋ฎ์ ์์น์์ ์ฐ๊ฒฐํ๋ ๊ฒ์ด ๋ฐ๋์ ํ์ํ ๊ฒ์ ์๋๋ผ๋ ์ ์ ๋ช ํํํ๋ ๊ฒ์ด ๋์์ด ๋ ์ ์์ต๋๋ค.
๊ตฌ์ฑ ์์ ํธ๋ฆฌ์ ๋ฎ์ ์์น์ ์ฐ๊ฒฐํ๋ฉด ์ค์ ๋ก _performance_์ ๋์์ด ๋ ์ ์์ง๋ง ์ฌ์ธต ๋น๊ต ๋ฌธ์ ์ ๋ํ ๊ทผ๋ณธ์ ์ธ ํด๊ฒฐ์ฑ ์ ์๋๋๋ค. ๊น์ ๋น๊ต ๋ฌธ์ ์ ๋ํ ํด๊ฒฐ์ฑ ์ ๋ฆฌ๋์๊ฐ ์ํ๋ฅผ ๋ถ๋ณ์ผ๋ก ์ ๋ฐ์ดํธํ๋ ๊ฒ์ด๋ฏ๋ก ์์ ๋น๊ต๋ ๋ ๊น์ ์ํ๊ฐ ์ธ์ ๋ณ๊ฒฝ๋์๋์ง ์๊ธฐ์ ์ ํฉํฉ๋๋ค.
์ฆ, ๋ฆฌ๋์๊ฐ ๊ธฐ์กด ์ํ ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ์ ์ํ๋ฅผ ๋ฐํํ๋ ํ, ์ต์์ ๊ตฌ์ฑ ์์๋ฅผ ํฐ ์ค์ฒฉ ์ํ ๋ถ๋ถ์ ์ฐ๊ฒฐํ๋ ๊ฒ์ _ ์์ ๋น๊ต์์๋ ์ ์๋ํฉ๋๋ค.
@naw ๊ทธ ํ์ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์ด๋ฅผ ๋ฐํ ์ผ๋ก์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ณณ์ ์๋ก์ด ๊ฐ์๊ธฐ๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
const reducers = combineReducers({
//...bunch of reducers which always return objects of 3 or 4 properties that change sometimes but
// the shape stays the same
dataVersion: (state = Symbol(), action = {}) => {
switch (action.type) {
case SAME_ACTION_AS_THE_ONE_THAT_UPDATES_A_COMPLEX_PROPERTY:
case ANOTHER_ACTION_THAT_ALSO_UPDATES_A_COMPLEX_PROPERTY:
return Symbol():
default:
return state;
}
}
})
๊ทธ๋๋ ์ฌ์ ํ ์ด์ํ๊ฒ ๋๊ปด์ง๋๋ค. ๊ฐ์๊ธฐ๊ฐ์๋ ๊ฒฝ์ฐ :
switch (action.type) {
case UPDATE_THIS:
return {a: action.a, b: action.b, c: action.c};
default:
return state;
}
์ด์ ์ํ์ ๋์ผํ ๋ชจ์ ์ธ ์๋ก ์ด๊ธฐํ ๋ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค๋ ์ฌ์ค์ previousState !== newState
๋ฅผ ํธ๋ฆฌ๊ฑฐํ๊ธฐ์ ์ถฉ๋ถํด์ผํฉ๋๋ค. ๋งค๋ฒ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํด์ผํ๋ค๋ฉด ์ ์ฒด์ฑ๋ณด๋ค๋ ๋ชจ์์ ์๊ฒ ๋น๊ตํ๋ ๊ฒ์ด ๋ ๋นํจ์จ์ ์ธ ๊ฒ ๊ฐ์ต๋๋ค. (๊ทธ๊ฒ์ด Redux๊ฐ ์ค์ ๋กํ๋ ์ผ์ด๋ผ๊ณ ๊ฐ์ ํ๋ฉด, ๊ทธ๊ฒ์ ๋ด Symbol
ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์๋ํ๋ค๋ ์ฌ์ค๋ก ์ธํด ๊ทธ๊ฒ์ด ์งํ๋๊ณ ์๋ค๊ณ ์๊ฐํ๊ฒ ๋ง๋ญ๋๋ค.)
์ด ํน๋ณํ ๊ฒฝ์ฐ์๋ ๋ ๋ง์ ์ปจํ ์ด๋ ๊ตฌ์ฑ ์์๋ฅผ ์ถ๊ฐํด๋ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ง ์์ต๋๋ค. ์ฌํ๊ฒ๋ ์ค๋ช ์ ์ํด ์ ์ฒด github ํ๋ก์ ํธ์ ์ฐ๊ฒฐํ ์๋ ์์ต๋๋ค. ์ด๊ฒ์ด ์ ๊ฐ ์ฌ๊ธฐ์ ๋ค๋ฃจ๊ณ ์๋ ํ์ฌ์ ๋น๊ณต๊ฐ ์์ค ํญ๋ชฉ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค.
@Zacqary ํ์ฌ ์ํ์ ์ด์ ์ํ์ ๋น๊ต๋ ์์ ๋์ผ (===)์ผ๋ก ์ํ๋ฉ๋๋ค. stateProps (mapStateToProps์ ๊ฒฐ๊ณผ) ๋น๊ต๋ ์์ ๋๋ฑ์ผ๋ก ์ํ๋ฉ๋๋ค.
์ซ๋ผ๋ฆฌ
mapStateToProps
๋ ์์ ์ ๋๋ฌํ์ฌ ์ฐ๊ฒฐ๋ ๊ตฌ์ฑ ์์์ ๋ฐ์ดํฐ๋ฅผ "์กฐ๋ฆฝ"ํฉ๋๋ค.
mapStateToProps
๋ ์์ ์์ ๋ค์ํ ์กฐ๊ฐ์ ๊ฐ์ ธ์ ์๋ก์ด stateProps
๊ฐ์ฒด์ ํค์ ํ ๋นํฉ๋๋ค.
๊ฒฐ๊ณผ stateProps
๊ฐ์ฒด๋ ๋งค๋ฒ ์ ๊ฒ์ด๋ฏ๋ก (์์ด๋ดํฐํฐ๊ฐ ๋ณ๊ฒฝ๋จ) stateProps
๊ฐ์ฒด ์์ฒด์ ๊ฐ์ฒด ์์ด๋ดํฐํฐ๋ฅผ ๋น๊ตํ ์ ์์ต๋๋ค .--- ์ฐ๋ฆฌ๋ ์๋๋ก ๋ด๋ ค ๊ฐ์ผํฉ๋๋ค. ๋ ๋ฒจ์ ํ์ธํ๊ณ @jimbolla๊ฐ ๋งํ ๊ฒ์ฒ๋ผ shallowEqual
๊ฐ ์๋ํ๋ ๊ฐ ๊ฐ์ ๊ฐ์ฒด ID๋ฅผ ํ์ธํฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ํ ์กฐ๊ฐ์ ๊ฐ์ฒด ID๊ฐ _ ๋ณ๊ฒฝ๋์ง ์๊ณ _ ์ผ๋ถ ์ค์ฒฉ ๋ ์์ฑ์ด ๋ณ๊ฒฝ๋๋ ๋ฐฉ์์ผ๋ก ๋ฆฌ๋์๋ฅผ ์์ฑํ ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ด๊ฒ์ ๋ณ๊ฒฝ๋์ง ์์ ์ํ๋ก ์๋ก์ด ์ํ๋ฅผ ๋ฐํํ๋ ๊ฒ์ด ์๋๋ผ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์
๋๋ค. ์ด๋ก ์ธํด react-redux
์ (๋) ์ค์ ๋ก ๋ฌด์ธ๊ฐ๊ฐ _did_ ๋ณ๊ฒฝ๋์์ ๋ ์๋ฌด๊ฒ๋ ๋ณ๊ฒฝ๋์ง ์์๋ค๊ณ ์๊ฐํ๊ฒํฉ๋๋ค.
์ด์ ์ํ์ ๋์ผํ ๋ชจ์ ์ธ ์๋ก ์ด๊ธฐํ ๋ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค๋ ์ฌ์ค์ previousState! == newState๋ฅผ ํธ๋ฆฌ๊ฑฐํ๊ธฐ์ ์ถฉ๋ถํด์ผํฉ๋๋ค.
์ผ๋ถ ์ํ ์กฐ๊ฐ์ ๋ํด ์ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๊ณ mapStateToProps
ํด๋น ์ํ ์กฐ๊ฐ์ ํค ์ค ํ๋์ ๊ฐ์ผ๋ก ์ฌ์ฉํ๋ฉด react-redux
์์ ๊ฐ์ฒด ID๊ฐ ๋ณ๊ฒฝ๋ ๊ฒ์๋ณด๊ณ ๋ค์ ๋ ๋๋ง์ ๋ฐฉ์งํ์ง ์์ต๋๋ค.
์์๋๋ก ์๋ํ์ง ์๋ ํน์ ์ฌํญ์ด ์์ต๋๊น? Symbol
ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ๋ฌด์์ ์๋ฏธํ๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
์ถ๊ฐ ๊ตฌ์ฑ ์์๋ฅผ ๋จ์ํ connected()
๊ตฌ์ฑ ์์๋ก ์ด๋ํ์ฌ ์ํ์ ์์ํด์ผํ๋์ง ์ฌ๋ถ๋ฅผ ๊ณ ๋ คํ ๊ฐ์น๊ฐ ์์ต๋๋ค. connect()
๋ ๊ฐ์ง ๊ตฌ์ฑ ์์๋ฅผ ์๋ํ์ฌ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง๋ง ๋ถํ์ํ ๋ณต์ก์ฑ์ด์์ต๋๋ค.
@ernieturner ๋๋ ์ด๊ฒ์ด ์ค๋ ๋ฌธ์ ํด๊ฒฐ ์น์ ๋งํฌ๋ฅผ ์ ๋ฐ์ดํธํ๊ณ ์ถ์ ์๋ ์์ต๋๋ค.
๊ฑด๋ฐฐ
๋๋์ด ๋ฌธ์ ๊ฐ ์์์ง๋ง ์ ํํ๋ ์๋๋๋ค.
๋ค์๊ณผ ๊ฐ์ด ์ํ์ ์์ฑ์ ์ ์ฉํ์ต๋๋ค.
constructor(props){
this.state = {
text: props.text
}
}
๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ์๋ํ์ง ์์์ต๋๋ค. ๊ทธ๋์ ์ํ์์ ์ง์ ๊ฐ์ ์ ์ฉํ์ต๋๋ค.
{this.props.text}
๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ์ ์๋ํฉ๋๋ค :)
@AlexanderKozhevin ๋ด๊ฐ ์ฐฉ๊ฐํ์ง ์๋ ํ, ์์ฑ์์ super(props)
.
์ผ๋ฐ์ ์ผ๋ก super(props)
๋ฅผ ํธ์ถํ๊ธฐ ์ ์๋ this
์ (๋ฅผ) ์ฌ์ฉํ ์ ์์ต๋๋ค.
@ cdubois-mh ๋ง์์, ๊ฐ์ฌํฉ๋๋ค.
๋ง์ถคํ ์ฑ ๋ฃจํธ ๊ฐ์๊ธฐ๋ฅผ ์์ฑํ์ผ๋ฉฐ ๊ทธ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
์ ์ฒด ์ํ์ ๋ณต์ฌ๋ณธ ๋ฐํ
{...state}
๋ฃจํธ ๊ฐ์๊ธฐ๊ฐ ๋๋ ๋ ๋์์ด๋์์ต๋๋ค.
@daedalius ๊ทธ๊ฒ์ด ๊ฐ์๊ธฐ๊ฐ ์๋ํ๋ ๋ฐฉ์์
๋๋ค.
์์
์ด ๊ด๋ จ์ด์๋ ๊ฒฝ์ฐ ์ํ๋ฅผ ๋ฐํํ๊ฑฐ๋ ์์ ์์ ๋ ๊ฐ์ด์๋ ์ํ ๋ณต์ฌ๋ณธ ์ ๋ฐํํด์ผํฉ๋๋ค.
๋ณต์ฌ๋ณธ์ ๋ฐํํ์ง ์์ผ๋ฉด react๊ฐ ํญ์ ๊ฐ์ด ๋ณ๊ฒฝ๋์์์ ๊ฐ์ง ํ ์์๋ ๊ฒ์ ์๋๋๋ค.
(์ : ์ค์ฒฉ ๋ ํญ๋ชฉ์ ์์ ํ๋ ๊ฒฝ์ฐ)
์ด ์ํ๋ฅผ ํ์ธํ์ญ์์ค.
{
"clients": [
{ "name": "John", "cid": 4578 },
{ "name": "Alex", "cid": 5492 },
{ "name": "Bob", "cid": 254 }
]
}
ํด๋ผ์ด์ธํธ์ ์ด๋ฆ์ ์์ ํ์ง๋ง ์ํ์ ๋ณต์ ๋ณธ์ ๋ฐํํ์ง ์๋ ๊ฒฝ์ฐ ์ํ๋ฅผ ์์ ํ์ง ์๊ณ ๋ฐฐ์ด์ ๊ฐ์ฒด๋ฅผ ์์ ํ ๊ฒ์ ๋๋ค.
๊ฐ์ฒด ์์ฒด๋ ์ฌ์ ํ ์ด์ ๊ณผ ๋์ผํ ์ฐธ์กฐ๋ฅผ ๊ฐ์ง๋ฏ๋ก react๊ฐ ๋ณ๊ฒฝ ์ฌํญ์ ๋์น ๊ฒ์
๋๋ค.
๋ณต์ ๋ณธ์ ๋ฐํํ๋ฉด ์ํ ์์ฒด์ ์ฐธ์กฐ๊ฐ ์ด์ ๋ฌ๋ผ์ง๊ณ (์ ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์) ๋ฐ์์ด ์ ์ฒด ๋ค์ ๋ ๋๋ง ํ๋ก์ธ์ค๋ฅผ ์์ํฉ๋๋ค.
๋ด๊ฐ ํ๋ ธ๋ค๋ฉด ์ ๋ฅผ ์์ ํ์ญ์์ค.ํ์ง๋ง ์ด๊ฒ์ด ๊ฐ์๊ธฐ๊ฐ ์๋ํ๋ ๊ฒ์ ์ดํดํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
๋ค, ๋ง์ต๋๋ค. ๋ํ @daedalius๋ _ ํญ์ _ state
์ ์์ ๋ณต์ฌ๋ณธ์ ๋ง๋ค๊ณ ์ถ์ง ์์ต๋๋ค. ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ์๋ง ๊ทธ๋ ๊ฒํด์ผํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ถํ์ํ ๊ตฌ์ฑ ์์๋ฅผ ๋ค์ ๋ ๋๋ง ํ ์ ์์ต๋๋ค.
๊ฐ์ ์ ๋ฐ์ดํธ
<AfterConnect
_forceUpdate={Symbol()}
/>
@BrookShuihuaLee ๊ทธ๊ฒ ๋ฌด์จ ๋ป์ด์ผ? ์ฝ๋์ ๋ํ ์ ๋ณด ๋ ์ค๋ช ์ ์ ๊ณตํ์ง ์์์ต๋๋ค. ๊ทธ๊ฒ์ ๋ฌด์์ํฉ๋๊น? ํ์ฌ ์งํ์ค์ธ ํ ๋ก ๊ณผ ๊ด๋ จ์ด์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?
@CedSharp _forceUpdate = {Symbol ()}์ ์ค์ ํ๋ฉด shallowEqual ํจ์๋ false๋ฅผ ๋ฆฌํดํฉ๋๋ค.
@BrookShuihuaLee ์ฒซ ๋ฒ์งธ ๋ต๋ณ์ ์ด์ ๊ฐ์ ์ค๋ช ์ ํฌํจํ๋ฉด ์ฌ๋๋ค์ด ๋ ์ ์ดํดํ ์ ์๋ค๋ฉด ์ข์ ๊ฒ์ ๋๋ค ^^
ํธ์ ๋ด์ ๊ฐ๊ธฐ
@BrookShuihuaLee : ๋์ ์๊ฐ ์ธ ๊ฒ ๊ฐ์ต๋๋ค. ์ ๊ทธ๋ ๊ฒํ๊ณ ์ถ์ต๋๊น?
@BrookShuihuaLee, ๋๋ @markerikson์ ๋์ํฉ๋๋ค.
์ํ๊ฐ ๋ณ๊ฒฝ๋์ง ์์์ ๋ ํด๋ก ์ ๋ฐํํ์ง ์์์ผํ๋ ์ด์ ๊ฐ ์์ต๋๋ค. ์๋ฃจ์
์ด ํ์ํ ๊ฒ์ผ๋ก ๋ณด์ด๋ ์ ํจํ ์์ ๋ฅผ ์ ๊ณต ํ ์ ์๋ค๋ฉด Redux๊ฐ ์๋ํ๋ ๋ฐฉ์์ ๋๋ฌ ๋ณด์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ฟก๋ฟก
๋ฟก ๋นต๋จ
AfterConnect ๊ตฌ์ฑ ์์๋ ์ค๊ณ ์ ์์ฃผ ๋ค์ ๋ ๋๋ง๋๊ธฐ ๋๋ฌธ์
๋๋ค. ์์ ๊ตฌ์ฑ ์์๊ฐ ๋ค์ ๋ ๋๋ง ๋ ๋ ๋ค์ ํ ๋ฒ ๋ค์ ๋ ๋๋งํด๋๋ฉ๋๋ค. ๋ถ๋ชจ ๊ตฌ์ฑ ์์์์ ๋ชจ๋ ๊ณ์ฐ์ ์ํํ๊ณ AfterConnect์ ๋ํ ์๋ง์ ์ํ์ ์ค์ ํ๊ณ ์ถ์ง ์์ต๋๋ค.
@BrookShuihuaLee , ์ฃ์ก ํฉ๋๋ค๋ง ๊ทํ์ ๊ตฌ์ฑ ์์๊ฐ
๋ด๊ฐ ์ ๋๋ก ์ดํดํ๋ค๋ฉด, ๋น์ ์ ์์ ์ ์ปค์คํ
์ปดํฌ๋ํธ์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์ต๋๊น? ForceUpdate๋ React ์ธ๊ณ์์ ๋งค์ฐ ๊ถ์ฅํ์ง ์๋ ๊ฒ์ด๋ฏ๋ก ์๋ฃจ์
์ผ๋ก ๊ถ์ฅํ์ง ์์ต๋๋ค.
๋์ ์ํ๊ฐ ์๋ ๋ค๋ฅธ ๊ณณ์์ ๋ณ๊ฒฝ ์ฌํญ์ ์ฐพ๋ ๊ด์ฐฐ ๊ฐ๋ฅํ ์๋ฃจ์
์ ์ฌ์ฉํ ์ ์์ต๋๊น? ์ํ๋ฅผ ์์ ํ์ง ์๊ณ ํน์ ๊ตฌ์ฑ ์์๋ฅผ ๋ค์ ๋ ๋๋งํด์ผํ๋ ์ด์ ๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง ๋ค์ ๋ ๋๋งํด์ผํ๋ ์ด์ ๋ฅผ ์๊ณ ์๋ค๋ฉด mobx์ ๊ฐ์ ๊ฒ์ ์ฌ์ฉํ ์ ์์ต๋๊น?
(https://github.com/mobxjs/mobx)
๊ทํ์ ์๋ฃจ์ ์ด ๋ฌด์์ธ์ง, ์์ด ์ํฉ์ ์ ์ฉ๋๋์ง ์ดํดํ๋ ค๊ณ ํฉ๋๋ค.
@CedSharp ๋ชจ๋ ์ฌ๋์ด forceUpdate๋ฅผ ์ฌ์ฉํด์ผํ๋ค๋ ์๋ฏธ๋ ์๋๋๋ค. ๊ทธ๋ฌ๋ ์ถ์ฒ์ ํ๋์ด๊ณ ์ ํ์ ๋ค๋ฅธ ๊ฒ์ ๋๋ค. React๋ ๊ฐ๋ฐ์๋ฅผ ์ํด ReactComponent.prototype.forceUpdate๋ฅผ ์ ์งํฉ๋๋ค. ์ฌ๋๋ค์ ์ ํ์ด ํ์ํฉ๋๋ค.
์ ๋ ๋ค๋ฅธ ์ ํ์ํ๋ ค๊ณ ํ์ต๋๋ค. ์๋ง๋ ์ต์ ์ ์ ํ์ด ์๋ ์๋ ์์ต๋๋ค.
์ต์ ์ ์๋์ง๋ง ์ฑ ์ํ๋ฅผ ์๋ชป ๊ตฌ์ฑํ๊ธฐ ๋๋ฌธ์์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ๋๋ ๋ฌธ์ ๋ฅผ ์ผ์ผํจ ์ํ์ ์ฌ๋ผ์ด์ค์์ ์์ ํ๋๋ฅผ ์ ๋ฐ์ดํธํ์ฌ ์์ ๋น๊ต ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
case SOME_ACTION:
return {
...state,
ts: (new Date).getTime(),
};
IMO๋ ์ข์ ์๋ฃจ์ ์ ์๋์ง๋ง ํ์ฌ ๋ฐ์ธ๋ฉ ์ํ์์๋ ๋ชจ๋ ์ฌ๋์๊ฒ (์ฆ, ํ๋ฃจ๊ฐ ๋๋ ๋ ๋ฆด๋ฆฌ์คํด์ผ ํจ) ๋น ๋ฅธ ์์ ์ด๋ฉฐ ๋ค๋ฅธ ๊ณณ์์ ๋ ๋๋ง์ ๊ฐ์ ํ ํ์๊ฐ ์์ต๋๋ค.
๊น๊ฒ ์ค์ฒฉ ๋ ์ํ์์๋ ์์ ๋น๊ต๊ฐ ์๋ํ๋๋ก ์ฝ๋๋ฅผ ๋ฆฌํฉํ ๋งํด์ผํฉ๋๋ค.
์ํ๋ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํด์ผํฉ๋๋ค. ๊ฐ์๊ธฐ์์ ์ํ๋ฅผ ์์ธํ ๋ณต์ฌํ๋ฉด ์ฐ๊ฒฐ์์ ์์ ๋น๊ต๊ฐ ์ถฉ๋ถํ๊ณ ํจ๊ณผ์ ์ ๋๋ค.
๋ด ๋ฌธ์ ๋ ๊ทธ ์์ ๋ฐฐ์ด์ด์๋ ๊ฐ์ฒด๊ฐ ์์ต๋๋ค. ์์ ๋น๊ต ์๊ธฐ ๋๋ฌธ์ ์์ ๋ฐฐ์ด ๋ด์ ๊ฐ์ฒด์ ๋๋ฌํ์ง ๋ชปํ์ต๋๋ค. mapStateToProps ๐๐ผ์์ lists:state.obj
๋์ list:state.obj.list
๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
๋ฐฉ๊ธ์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ผ๋ฉฐ ์ฒซ ๋ฒ์งธ ๋ต๋ณ์ ์ฝ์ ํ ๊ฐ์๊ธฐ๋ฅผ ํ์ธํ๊ณ ๊ฑฐ๊ธฐ์ ์คํ๊ฐ ์์์ ์์์ต๋๋ค. ์์ฑ ์ด๋ฆ์ ๋ณ๊ฒฝํ๊ณ INITIAL_STATE๋ฅผ ์ ๋ฐ์ดํธํ์ง๋ง์ด ๋ฌธ์ ๊ฐ์๋ ์์ ์ผ๋ก ์ ๋ฐ์ดํธ์ค์ธ ํค๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ ์์์ต๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๊ตฌ์ฑ ์์์์ ์ฌ์ฉ๋์ง ์์ ์์์ ํค๋ฅผ ์ ๋ฐ์ดํธํ๊ณ ์์์ผ๋ฏ๋ก์ด ์์์ ํค๊ฐ ์ ๋ฐ์ดํธ ๋ ๋ ๋ค์ ๋ ๋๋ง๋์ง ์์ ๊ฒ์ ๋๋ค.
๊ฐ์๊ธฐ์์ ์คํ๋ฅผ ํ์ธํ์ญ์์ค! :)
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ฆฌ๋์์ ์์ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ํตํด ์ ์ฅ์์์ ๋ฐ์ดํฐ๊ฐ ์ค์ / ์ ๋ฐ์ดํธ / ์ญ์ ๋ฉ๋๋ค. ๊ฐ์๊ธฐ๋ ์ฑ ์ฌ๋ผ์ด์ค์ ํ์ฌ ์ํ๋ฅผ ์์ ํ๊ณ ์๋ก์ด ์ํ๋ฅผ ๋ค์ ๊ฐ์ ธ์ฌ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค. ๊ตฌ์ฑ ์์๊ฐ ๋ค์ ๋ ๋๋ง๋์ง ์๋ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์ด์ ์ค ํ๋๋ ํ์ํ ๋ณ๊ฒฝ ์ฌํญ์ด ์ ์ฉ๋ ์ํ์ ์ ๋ณต์ฌ๋ณธ์ ๋ฐํํ๋ ๋์ ๊ฐ์๊ธฐ์์ ๊ธฐ์กด ์ํ๋ฅผ ์์ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค ( ๋ฌธ์ ํด๊ฒฐ ์น์ ํ์ธ ). ๊ธฐ์กด ์ํ๋ฅผ ์ง์ ๋ณ๊ฒฝํ๋ฉด Redux๋ ์ํ ์ฐจ์ด๋ฅผ ๊ฐ์งํ์ง ์์ผ๋ฉฐ ์ ์ฅ์๊ฐ ๋ณ๊ฒฝ๋์์์ ๊ตฌ์ฑ ์์์ ์๋ฆฌ์ง ์์ต๋๋ค.
๋ฐ๋ผ์ ๊ฐ์๊ธฐ๋ฅผ ํ์ธํ๊ณ ๊ธฐ์กด ์ํ๋ฅผ ๋ณ๊ฒฝํ์ง ์๋์ง ํ์ธํฉ๋๋ค. ๋์์ด ๋์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.