2017-11-06 10 views
0

Redux 팀에서는 selectors always return Immutable.JS objects을 제안합니다. 그러나 셀렉터가 반환하는 객체가 여러 슬라이스로 구성된 상태에서 셀렉터가 Immutable.JS 객체를 반환하는 것은 어렵습니다.Immutable.JS를 사용할 때 redux 선택자는 항상 Immutable.JS 객체를 반환해야합니까?

shopping-cart 데모를 예로 들어 보겠습니다. 그것은 불변을 반환 할 수 있도록이 셀렉터를 재구성하는 방법, Immutable.JS를 사용하는 경우,이 경우

export const getCartProducts = state => 
    getAddedIds(state).map(id => ({ 
    ...getProduct(state, id), 
    quantity: getQuantity(state, id) 
    })) 

: 선택기 getCartProducts는 반환 객체를 생성 카트 슬라이스와 국가의 제품 슬라이스를 모두 사용합니다. JS 개체?

답변

2

상태를 돌연변이하지하는 것이 중요합니다,하지만 당신은 Immutable.JS

당신은 돌아 오는와 Immutable.JS를 사용할 필요가 없습니다

없이이 작업을 수행 할 수 있습니다. Plain JavaScript는 올바르게 작성된 경우 변경할 수없는 라이브러리를 사용하지 않고도 완벽하게 불변성을 제공 할 수 있습니다. redux faq

+0

불변의 집중 라이브러리가없는 불변의 상태를 기술하는 방법을 알고 있습니다. 하지만 Immutable.JS를 사용할 때 내 질문에 언급 된 사례를 처리하는 방법을 궁금해. 그게 내 질문이다. –

0

변경할 수없는 JS 개체를 사용하고 메서드 .map을 사용하는 경우 새로운 ImmutableJs 개체를 반환합니다. 당신은 바닐라 JS 개체가하고 Immutable.js로 변환 할 경우

https://facebook.github.io/immutable-js/docs/#/Map/map

는 도우미 함수 fromJS() https://facebook.github.io/immutable-js/docs/#/fromJS

let some = {foo: 'bar'}; 
let immutableObject = Immutable.fromJS(some); 

그래서 몇 가지 옵션이있다.

  1. 당신이 그것을 지금처럼 Immutable.js 구조

  2. 실행에지도 기능을 실행하고 Immutable.js에 바닐라에서 전송 완료 후 Immutable.fromJS()

를 사용하고 있는지 확인
+0

감사. 하지만 어쩌면 너는 내 말을 듣지 않을거야. 필자는 Immutable.JS를 사용할 때 셀렉터가 항상 Immutable.JS 객체를 반환해야하는지 여부를 묻습니다. 앞에서 언급 한 경우 일반 JS 객체를 반환하는 선택자가 더 합리적입니다. –

+0

immutable.js 구조체가 있으면 immutable.js 객체 또는 노드 값을 반환합니다. 노드 값이 js 객체이면 js 객체를 반환합니다. –