2017-04-11 5 views
2

私は数ヶ月前にEmberからRedux + Immutable JSプロジェクトに切り替えて、全体的にこの経験を楽しんでいます。保存場所ReduxとImmutable JSでレコードメタデータ

1つの問題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について私が最も間違っているのは、Modelプロパティに簡単にアクセスできることです。

Ex。 user.get('isSaved')またはuser.get('name')

ReduxとImmutableでこれを再現することはできますか?どのように前にこの状況に近づいたのですか?

答えて

2

ので、私は、私はエンバーは簡単にモデルのプロパティにアクセスできることですについてほとんど欠場何、問題を誤解される可能性があります。

user.get( 'isSaved')またはuser.get( '名前')

このは不変レコードの作業を行います。

あなたのレコードにあまりにも多くのプロパティを追加したくない場合は、1つのステータスプロパティを持っており、いくつかのゲッターを追加することができます(あなたの状態は相互に排他的であると仮定した場合):

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_ために。ありがとうございました! –

関連する問題