๋ฆฌ๋์ค์ ๋ํ์ฌ ๊ณต๋ถํ๋ ์ค, ๋ฆฌ๋์ค๋ฅผ ์ฌ์ฉํ ๋์ ์ฝ๋์ ์ฌ์ฉํ์ง ์์ ๋์ ์ฝ๋ ์ฐจ์ด๊ฐ ๊ถ๊ธํ์ฌ ์ค์ต์ ํด๋ณด์๋ค. ์ค์ต์ ๋ด์ฉ์ red ๋ฒํผ
, green ๋ฒํผ
, blue ๋ฒํผ
์ ๋ง๋ค๊ณ ๊ฐ๊ฐ์ ๋ฒํผ์ ๋๋ฅด๋ฉด ๋ชจ๋ ๋ฒํผ์ ์์ญ์ด ๋๋ฅธ ๋ฒํผ์ ์์ผ๋ก ๋ณํ๋ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ RED, BLUE, GREEN
์ธ ๊ฐ์ ๋ฒํผ์ด ์๋ค. ์ฐ์ ๋ฒํผ์ ๋๋ฅด๋ฉด ๊ทธ ๋ฒํผ์ ์์ ๋ง๊ฒ ๋ณํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ด ๋ช ๊ฐ์ ๋ก์ง์ด ํ์๋ก ํ๋์ง ์๊ฐํด๋ณด์๋ค.
๐ฑ๏ธโค๏ธ ์๋ฅผ ๋ค์ด, RED ๋ฒํผ์ ๋๋ ์ ๋ ๋นจ๊ฐ ๋ฒํผ์ด ํด์ผํ ์ผ
1. ์๊ธฐ ์์ ์ ์์ ์ ์งํด์ผ ํ๋ค.
2. ์ด๋ก ๋ฒํผ๋ ๋นจ๊ฐ์์ผ๋ก ๋ฐ๋์ด์ผ ํ๋ ๊ฒ์ ์๋ ค์ค๋ค.
3. ํ๋ ๋ฒํผ๋ ๋นจ๊ฐ์์ผ๋ก ๋ฐ๋์ด์ผ ํ๋ ๊ฒ์ ์๋ ค์ค๋ค.
RED ๋ฒํผ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก BLUE, GREEN ๋ฒํผ๋ ํด์ผํ ์ผ์ด 3๊ฐ์ง๋๊น ๋ฒํผ 3๊ฐ์ ์ด ๋ก์ง์ 9๊ฐ๋ผ๊ณ ์๊ฐ์ ํ๋ค.
<div id="red"></div>
<div id="green"></div>
<div id="blue"></div>
์ฐ์ ๋ฒํผ๋ณ๋ก id ๊ฐ์ ์ฃผ์๋ค. ์ด์ ๊ฐ๊ฐ์ ์๊น์ ์ด๋ฆ์ผ๋ก ํจ์๋ฅผ ๋ง๋ค์ด id ๊ฐ์ document.querySelector
์ ํตํด ๋ถ๋ฌ์ฌ ๊ฒ์ด๋ค.
function red(){
document.querySelector('#red').innerHTML=
`
<div class="container" id="conponent_red">
<h1>red</h1>
<input type="button" value="fire">
</div>
`;
}
red();
์์ ์ฝ๋๋ RED ๋ฒํผ์ ๋ถ๋ถ์ด๋ค. ๋ฒํผ์ onclick ์ด๋ฒคํธ
๋ฅผ ์ค์, ๋ฒํผ์ด ํด๋ฆญ ๋์์ ๋ ๋ค๋ฅธ ๋ฒํผ('#component_'
)์ ์๊น๋ ๋ฐ๋๊ฒ ๋๋ค.
๐ค ์ด๋ ๊ฒ ์ฝ๋๋ฅผ ์์ฑํด๋ณด๋, ๋ง์ฝ ์๊น์ด 50 ๊ฐ์ง๋ผ๋ฉด ํจ์๋ฅผ 50๊ฐ๋ฅผ ๋ง๋ค์ด์ผ ํ๋๋ฐ ์๋ํ๋ค. ๋ํ, ํจ์ ๋ด๋ถ์ ์ฝ๋๋ 3๊ฐ์ง๊ฐ ์๋๋ผ N๊ฐ๋ก ๋์ด๋ ํ ๋ฐ ์ด๋ ๊ฒ ์ฝ๋๋ฅผ ์ง๋ ๊ฑด ์ค์ฉ์ ์ด์ง ์๋ค๋ ๋จ์ ์ด ์๋ค.
Redux๋ state ๊ฐ์ฒด
๊ฐ ์ค์ ์ง์ค์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์์์ ๊ฒ์ ์ ์์ state ๊ฐ์ฒด๋ผ๊ณ ์๊ฐ์ ํ๋ค. ์ด๋ฒ์๋ ๋ฒํผ์ ๋๋ฅด๋ฉด ๋ชจ๋ ๊ฐ์ ์์ผ๋ก ๋ณํ๊ธฐ ์ํด ๋ช ๊ฐ์ ๋ก์ง์ด ํ์ํ ๊น?
๐ฑ๏ธ ์๋ฅผ ๋ค์ด, ๋ฒํผ์ ๋ฒํผ์ด ํด์ผํ ์ผ
1. ์๊ธฐ ์์ ์ ์์ ์ ์งํด์ผ ํ๋ค.
2. ์๊ธฐ ์์ ์ ์์ state์๊ฒ ์๋ ค์ค๋ค.
= ๊ทธ๋ผ state๊ฐ ๋ค๋ฅธ ๋ฒํผ์๊ฒ ์๋ ค์ค ๊ฒ.
์ด๋ฒ์๋ ํ ๋ฒํผ๋ง๋ค 2๊ฐ์ ๋ก์ง์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์ด 6๊ฐ์ ๋ก์ง์ด ์กด์ฌํ๋ค. ํ์คํ Redux๋ฅผ ์ฌ์ฉํ๋๊น ์ ์ฒด ๋ก์ง์ด ์ค์๋ค. ์ด ๋ง์ ์ฝ๋๋ ๊ฐ๊ฒฐํด์ก๋ค๋ ์๋ฏธ์ด๋ค.
let store= Redux.createStore(reducer);
Redux๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ์ฌ store์ ์์ฑํ๋ค. ์ด ๋ ์ธ์๋ก reducer ํจ์๋ฅผ ์ ๋ฌํด์ผ ํ๋ค.
function reducer(state,action){
if(state===undefined){
return {color:"yellow"}
}
}
๐ ์์ ์ฝ๋๋ฅผ ๋ณด๋ฉด if๋ฌธ์ด ์๋ค.
reducer ํจ์๋ฅผ ์์ฑํ ๋ state์ ์ด๊ธฐ๊ฐ
์ ์ค์ ํด์ฃผ์ด์ผ ํ๋ค. ์ฒ์์๋ ๊ฐ์ด undefined
์ด๋ฏ๋ก ์กฐ๊ฑด๋ฌธ์ ๊ฑธ์ด ์ด๊ธฐ๊ฐ
์ ์ค์ ํด์ฃผ๋ ๊ตฌ๋ฌธ์ด๋ค. ์ฌ๊ธฐ์๋ ์ด๊ธฐ๊ฐ์ color : "yellow"์ด๋ฏ๋ก ์ฝ์์ ํ์ธํ๋ฉด ๋ฐ๊ณผ ๊ฐ์ด ๋ํ๋๋ค.
state์ ์ด๊ธฐ๊ฐ๋ ์ค์ ์ ํ์ผ๋, RED ํจ์์ state ๊ฐ์ ๊ฐ์ ธ์ฌ ๊ฒ์ด๋ค.
let state = store.getState();
๐ค ํ์ง๋ง ๋นจ๊ฐ์ ๋ฒํผ์ ๋๋ฅด๋ฉด ๋นจ๊ฐ์์ด ๋์์ผ ํ๋๋ฐ ์ด๊ธฐ๊ฐ์ด ๋ ธ๋์์ด๋ผ ๋ ธ๋์์ด ๋ ์ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๋ค.
let newState;
if(action.type ==='CHANGE_COLOR'){
newState = Object.assign({}, state, {color:"red"})
}return newState;
document.querySelector('#red').innerHTML= `
<div class="container" id="conponent_red" style="background-color:${state.color}">
<h1>red</h1>
<input type="button" value="fire">
</div>
`
store.subscribe(red);
์ด์ ๋ง์ฐฌ๊ฐ์ง๋ก BLUE์ GREEN๋ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ์์ฑ!