2017-02-21 5 views
2

이것은 올바르게되지 않습니다.redux를 사용하는 동안 immutable.js를 어떻게 사용합니까?

redux를 사용하는 동안 축소 기에서 스프레드 연산자를 사용합니다.

예 :

{...state,data : action.payload,fetching:false}

새로운 상태 객체가 생성되는 것을 오히려 오른쪽 올바른 상태를 돌연변이보다? (제발 내가 잘못하면 정정 해주세요)

그런 경우에는 immutableJS를 어떻게 사용합니까 ?? 위와 동일한 동작을 수행합니다.

답변

2

당신이 옳았다는 예는 새 개체를 만들고 상태를 변경하지 않는 것입니다. 많은 경우에 괜찮습니다. 따라서 ImmutableJS가 당신을 위해 무엇이든 추가 할 것이라고 생각하지 않는다면, 그것을 사용하지 마십시오.

확산 연산자가 ES6에서 일반적으로 사용되기 전에는 ImmutableJS가 더 유용했습니다 (기술적으로는 still only a proposal이라고 생각합니다). ES6를 사용하지 않는다면 대안은 Object.assign을 사용하는 것입니다.이 방법은 특히 더 중첩 된 구조에서 매우 지저분해질 수 있습니다.

ImmutableJS는 상태 트리 내에서 단일 노드를 수정해야하는 경우에도 유용하지만,이 경우 일반적으로 다른 방식으로 데이터를 구성하여이 노드를 둘러 쌀 수 있습니다.

+0

네 그것을 사용하는 혼합 이점이 있습니다. 나는 당신이 정규화 된 데이터 구조를 가지고 있다면 그렇게 지저분하지 않다고 말하고, 그 시점에서 Immutable은 깊은 나무를 가지지 않을 것이므로 더 쉬운 변경을 할 수있는 쉬운 API의 이점 중 일부를 잃어버린다. 그러나, 나는 여전히 당신이 모든 데이터 변경에서 변경할 수 없도록해야하며, 편리한 API를 사용하는 동안 다른 개발자도 있어야 함을 확신합니다. 나는 개인적으로 그것을 추천 할 것이다 – JonE

+0

그래, 그게 중요한 포인트 야. 필자는 라이브러리를 사용하는 것만으로도 큰 의미가 있다고 생각합니다. 코드베이스가 공유된다면, 제 생각에는 불변성을 적용하는 것이 합리적인 이유가 될 것입니다. –

+0

"그 시점에서 Immutable은 깊은 나무를 가지지 않기 때문에 더 깊은 변화를 만들기위한 쉬운 API의 이점 중 일부를 잃습니다."@ Glitch100 정교하게 만들 수 있습니까? –

0

상태를 변경하지 않으면 상태가 플럭스 흐름 외부에서 수정되지 않습니다. 많은 레벨과 소도구가 지나가는 매우 복잡한 구조에서는 우연히 국가가 돌연변이되는 것을 방지합니다.

1

간단한 평면 상태 인 경우 추가 라이브러리없이 쉽게 관리 할 수 ​​있습니다.

하지만, 그것은

return { 
    ...state, 
    users: { 
    ...state.users, 
    [action.userId]: { 
     ...state.users[action.userId], 
     name: action.newName 
    } 
    } 

꽤 많은 코드 그래서 사소한하지 될 것입니다 일부 사용자의 이름을 업데이트하려는 경우의 다음

{ 
    users: { 
    123: { 
     name: 'John', 
     lastName: 'Doe' 
    }, 
    345: { 
     name: 'Bob', 
     lastName: 'Jack' 
    } 
    .... 
    } 
} 

처럼, 뭔가 더 복잡한 생각 해보자, ISN 그것? 지금이 순간, 당신은 다른 해결책을 찾아 할 수 있으며, immutable.js은 한 줄과 동일한 기능을 수행 도움이 될 수

state.setIn(['users', action.userId, 'name'], action.newName) 
관련 문제