2017-07-07 2 views
1
case "CONNECTOR_CONNECTION_FULFILLED": 
       state = { 
        ...state, 
        appState: 'loggedIn', 
       }; 
       state.ourPlayer = { ...action.payload.player } 

       break; 

私のアプリがこのアクションを実行すると、使用するアプリのプレーヤーオブジェクトが作成されます。プレーヤーオブジェクトにはプロトタイプメソッド(player.spawn()、player.killed()など)がありますが、コピーするとこれらのメソッドはコピペしません。redux reducerのオブジェクトからプロトタイプ関数をコピーする

+1

Reduxのドキュメント[強く反対をお勧めします](http://redux.js.org/docs/faq/OrganizingState.html#can-i-put-functions-promises-or-other-非直列化可能項目 - 自分の店舗状態)ストア内のシリアライズ可能なアイテム(関数など)あなたのReduxレデューサーがプレイヤーの状態を変更するならば、それらをプレーンオブジェクトにして、 'kill 'のようなインスタンスメソッドの代わりにレデューサーを使うべきです。あなたのレデューサーがプレーヤーの状態を変更しない場合は、単に 'state.ourPlayer = action.payload.player'を実行する必要があります。 –

答えて

1

{ ...someObject }オブジェクトスプレッドシンタックスとメソッドは、オブジェクト自身の列挙可能なプロパティのみをコピーします。非可算小道具、プロトタイプ小道具、プロトタイプ自体はコピーされません。

class Player { 
    constructor(anotherPlayer) { 
    // copy the props of another player there 
    } 
} 

をし、それを使用しますので、

、しばらく、Reduxの世界ではお勧めしません、あなたは例えば、あなたのドメインオブジェクトのためのコピーコンストラクタのいくつかの種類を作成することができます減速:

case "CONNECTOR_CONNECTION_FULFILLED": 
    state = { 
    ...state, 
    appState: 'loggedIn', 
    }; 
    state.ourPlayer = new Player(action.payload.player) 

    break; 
関連する問題