2017-04-11 6 views
2

몇 달 전에 Ember에서 Redux + Immutable JS 프로젝트로 전환하여 전반적인 경험을 즐기고 있습니다.저장 위치 Redux 및 변경 불가능한 JS로 레코드 메타 데이터

하나의 문제점 I 여전히은 레코드 작업시 해당 레코드의 메타 데이터를 저장하는 좋은 솔루션을 찾지 못했습니다.

예를 들어, 나는 User 기록을 가지고 가정 해 봅시다 다음 User를 들어

const userRecord = Immutable.Record({ 
    id: null, 
    name: '', 
    email: '' 
}); 

, 또한 isLoading 또는 isSaved 같은 속성을 저장하실 수 있습니다. 첫 번째 해결 방법은 userRecord에 저장하는 것입니다. 이것이 지금까지 가장 쉬운 해결책 일 것이지만, 이것은 나에게 틀린 느낌입니다.

또 다른 해결책은 User 레코드와 사용자에 대한 메타 데이터가 포함 된 User지도를 만드는 것입니다.

Ex.

const userMap = Immutable.Map({ 
    record: Immutable.Record({ 
     id: null, 
     name: '', 
     email: '' 
    }), 
    isLoading: false, 
    isSaved: true 
}); 

나는이 더 우아 생각하지만, 나는 모든 사용자 속성을 더욱 깊이 중첩 된, 그래서 사용자 속성에 액세스하는 것은 매우 상세하게 될 방법을 좋아하지 않는다.

Ember에 대해 가장 많이 놓친 부분은 모델 속성에 쉽게 액세스 할 수 있습니다.

Ex. user.get('isSaved') 또는 user.get('name')

Redux 및 Immutable으로 이와 같은 것을 재현 할 수 있습니까? 전에이 상황에 어떻게 접근 했습니까? 나는이 문제를 오해 될 수

답변

2

,

때문에 내가 엠버 쉽게 모델 속성에 액세스 할 수있는 약 가장 그리워.

user.get ('isSaved') 또는 user.get ('이름')

은 불변의 레코드에 대한 작업을 수행합니다. 당신이 당신의 기록에 너무 많은 속성을 추가하지 않으려면

, 당신은 하나의 상태 속성을 가질 수 있고 (당신의 상태는 상호 배타적 가정) 일부 게터를 추가

const STATUS = { 
    INITIAL: 'INITIAL', 
    LOADING: 'LOADING', 
    SAVING: 'SAVING 
}; 

class UserRecord extends Immutable.Record({ 
    id: null, 
    name: '', 
    email: '', 
    status: STATUS.INITIAL}) { 

    isLoading() { 
    return this.get('status') === STATUS.LOADING; 
    } 

    isSaving() { 
    return this.get('status') === STATUS.SAVING; 
    } 
} 

new UserRecord().isLoading()); // returns false 

new UserRecord({status: STATUS.LOADING}).isLoading(); // returns true 
new UserRecord().set('status', STATUS.LOADING).isLoading(); // returns true 
+0

_Exactly_ 내가 찾던 에 대한. 고맙습니다! –