Persistent Data Structures - ChoDragon9/posts GitHub Wiki
λΆλ³ μλ£κ΅¬μ‘° - Immutable Data Structures
λΆλ³ μλ£ κ΅¬μ‘°λ μμν λ³νμ§ μλ μνλ₯Ό λ§νλ€. λ³νκ° νμν λ μλ‘μ΄ μνλ₯Ό λ§λ€μ΄ λ΄κ³ κ°μ λ³κ²½νλ€. μ΄μ μνλ μ¬μ©νμ§ μμΌλ©΄ λ©λͺ¨λ¦¬ μμμ μ κ±°λλ€.
cloneμ μ¬μ©ν μμ
λͺ¨λ μλ‘κ² λ§λ€κΈ° λλ¬Έμ inner
λ λ€λ₯Έ κ°μ²΄κ° λλ€.
const clone = obj => JSON.parse(JSON.stringify(obj))
const obj = {
message: 'Hello World',
inner: { count: 1 }
}
const clonedObj = Object.assign(clone(obj), {
message: 'Hello'
})
console.log(obj === clonedObj) // false
console.log(obj.inner === clonedObj.inner) // false
μμ μλ£ κ΅¬μ‘° - Pesistent Data Structures
μμμ±(μ§μμ±)μ μνλ₯Ό μ κ±°νμ§ μκ³ λ³΄μ‘΄νλ κ²μ μλ―Ένλ€.
μμ μλ£ κ΅¬μ‘°λ μνμ λ³νκ° νμν λ μλ‘μ΄ μνλ₯Ό λ°ννμ§λ§ μ΄μ μνλ₯Ό κ³μ μ μ§νκ³ μλ μλ£κ΅¬μ‘°μ΄λ€. λ€μ μν λ³νκ° νμν μμ μ μ΄μ μ λ§λ€μλ μνμ λμΌνλ©΄ μ΄μ μνλ₯Ό μ¬μ©νλ€.
μνλ₯Ό μ κ±°νμ§ μκ³ μ¬μ¬μ©νλ©° λ³νκ° νμν λλ μλ‘ λ§λ€κΈ° λλ¬Έμ λ©λͺ¨λ¦¬ ν¨μ¨μ±κ³Ό λΆλ³μ±μ κ°μ§ μ μλ€.
μμ μλ£ κ΅¬μ‘°λ₯Ό μ¬μ©νλ©΄ λ©λͺ¨λ¦¬ ν¨μ¨μ±μ΄ λΉκ΅μ λ¨μ΄μ§λ λΆλ³ μλ£ κ΅¬μ‘°μ λ¨μ μ ν΄κ²°ν μ μλ€.
immerJsμ μ¬μ©ν μμ
μνκ° λ³κ²½λμ΄ κ°μ²΄λ₯Ό μλ‘ λ§λ€μμ§λ§ inner
λ λ³κ²½μ΄ λμ§ μμκΈ° λλ¬Έμ κΈ°μ‘΄ μνλ₯Ό μ μ§νλ€.
const obj = {
message: 'Hello World',
inner: { count: 1 }
}
const clonedObj = immer.produce(obj, (draft) => {
draft.message = 'Hello'
})
console.log(obj === clonedObj) // false
console.log(obj.inner === clonedObj.inner) // true