Immutable(2) - MoonGyeongHyeon/React_Study GitHub Wiki
React - Immutable.js(2)
List
List๋ ๋ฐฐ์ด ๋์ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ๊ตฌ์กฐ๋ค. Javascript์ ๋ฐฐ์ด๊ณผ ๋์ผํ๊ฒ map, filter, sort, push, pop ๋ฑ๊ณผ ๊ฐ์ ๋ด์ฅ ๋ฉ์๋๋ฅผ ์ง์ํ๋ค. ์ด๋ฌํ ๋ด์ฅ ๋ฉ์๋์ ๊ฒฐ๊ณผ๋ ํญ์ ์๋ก์ด List๋ผ๋ ๊ฑธ ์์ง๋ง์. ๋ฆฌ์กํธ์ ์ปดํฌ๋ํธ๋ Immutable์ List์ ํธํ์ด ๋๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ map ๋ฉ์๋๋ก ๋ ๋๋งํ ์๋ ์๋ค.
์์ฑํ๊ธฐ
์ผ๋ฐ์ ์ธ ์์ฑ ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ๋ค.
var List = Immutable.List;
var list = List([0,1,2,3,4]);
๋ง์ฝ List์ ์์๊ฐ ๊ฐ์ฒด๋ผ๋ฉด Map ํํ์ ๊ฐ์ ๋ฃ์ด์ค์ผ ํ๋ค.
var List = Immutable.List;
var Map = Immutable.Map;
var fromJS = Immutable.fromJS;
var list = List([
Map({ value: 1 }),
Map({ value: 2 })
]);
// or
var list2 = fromJS([
{ value: 1 },
{ value: 2 }
])
Map ํจ์ ๋๋ fromJS ํจ์๋ฅผ ์ด์ฉํ์ฌ List๋ฅผ ์์ฑํ ์ ์๋ค.
Map๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก List๋ toJS
๋ฉ์๋๋ฅผ ํตํด ์ผ๋ฐ ๋ฐฐ์ด๋ก ๋ณํํ ์ ์๋ค.
์ฌ์ฉ ๋ฐฉ๋ฒ
-
๊ฐ ์ฝ์ด์ค๊ธฐ
๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ๋ค.
list.get(0); // 0 ๋ฒ์งธ ์์ดํ ์ ์ฝ์ด์จ๋ค. list.getIn([0, 'value']); // 0 ๋ฒ์งธ ์์ดํ ์ value ์์ฑ ๊ฐ์ ์ฝ์ด์จ๋ค.
-
์์ดํ ์ถ๊ฐ/์ ๊ฑฐ/์์ ํ๊ธฐ
์ถ๊ฐ๋
push
๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค. ๋ฐฐ์ด์ฒ๋ผ ๊ธฐ์กด์ ๊ฐ์ ์ถ๊ฐํ๋ ๊ฒ ์๋๋ผ ์๋ก์ด List๋ฅผ ๋ฐํํ๋ค. ์ด๋ ์ ๊ฑฐ, ์์ ๋ ๋ง์ฐฌ๊ฐ์ง๋ค. ์์๋ฅผ ๋งจ ์์ ๋ฃ๊ณ ์ถ๋ค๋ฉดunshift
๋ฅผ ์ฌ์ฉํ๋ค.var newList = list.push(Map({ value: 3 })); var newList2 = list.unshift(Map({ value: 3 }));
โ
์ ๊ฑฐ๋
delete
๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค. ์ธ์๋ก index ๊ฐ์ ๋๊ธด๋ค. ๋งจ ๋ค์ ์์๋ฅผ ์ญ์ ํ๊ณ ์ถ๋ค๋ฉดpop
์ ์ฌ์ฉํ๋ค.var newList = list.delete(1); var newList2 = list.pop();
โ
์์ ์
setIn
์ ์ฌ์ฉํ๋ค. ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก๋update
๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๋ ์๋ค.var newList = list.setIn([0, 'value'], 10); // 0๋ฒ ์์์ value ์์ฑ ๊ฐ์ 10์ผ๋ก ๋ฐ๊พผ๋ค. var newList2 = list.update( 1, item => item.set('value', item.get('value') * 5) ); // update(index, callback) // list ์ค index ๋ฒ์งธ ์์์์ callback ํจ์๋ฅผ ์ฒ๋ฆฌํ๋ค. // ์ฆ, 1๋ฒ ์์๋ฅผ ์์ ํ๋๋ฐ, 1๋ฒ ์์๋ฅผ item์ด๋ผ๋ ์ธ์๋ก ๋๊ฒจ callback์ ์ฒ๋ฆฌํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค.
-
ํฌ๊ธฐ ๊ฐ์ ธ์ค๊ธฐ
ํฌ๊ธฐ๋ฅผ ๊ฐ์ ธ์ฌ ๋
size
๋ฅผ ์ฌ์ฉํ๋ค. ๋น์ด ์๋์ง ํ์ธํ ๋isEmpty
๋ฅผ ์ฌ์ฉํ๋ค.list.size; list.isEmpty();