2017-08-06 15 views
0

私はreact.jsの初心者です。私は初心者のプロジェクトとしてボードゲームを作っています。ダイスを回転させるコンポーネントがあります。ダイスがロールされると、その状態のダイスがそのダイスの値を反映するようにアクションがディスパッチされます。しかし、減速機では、stateとaction.dataの値は同じです。そんなことがあるものか? 何らかの形で還元剤の状態が更新されました

ボタンをクリック

は、アクションがディスパッチされ、それにサイコロ値を追加することにより、更新に状態を想定している。

は、私はこれを返すコンポーネントを転がすサイコロを持っています。ジューサーで

rollDice(){ 
     console.log("this.props ||||| rollDice()", this.props); 
     if(this.props.isDiceRolled){ 
      alert("Move the marker..."); 
      return; 
     } 
     this.props.dispatch({ 
      type: "ROLL_DICE", 
      data: { 
       dice: Math.ceil(Math.random() * 5), 
       isDiceRolled: true 
      } 
     }); 
    } 

:Reduxので

switch(action.type){ 

    . 
    . 
    . 

    case "ROLL_DICE": { 
     console.log("ROLL_DICE"); 
     console.log(state, action.data); 
     const newTurn = Object.assign(state.currentTurn, action.data); 
     return Object.assign(state, { currentTurn: newTurn }); 
    } 
    default: { 
     return state; 
    } 

} 
+0

これらの行を変更した場合 const newTurn = Object.assign(state.currentTurn、action.data); 戻り値Object.assign(state、{currentTurn:newTurn}); to this return state; stateとaction.dataの正しい値は、console.logがこれらの文よりも上になっていても記録されます。何が起こっている? :( –

+1

いくつかのコードスタイルのアドバイス:コンポーネントのメソッドではなく、 'mapDispatchToProps'に中間関数を持つ方が良いでしょう。' const mapDispatchToProps =(dispatch)=>({rollDice :()=> dispatch(actions.rollDice )}}); 'コンポーネントでは、単にthis.props.rollDice()を呼び出します。 – timotgl

答えて

4

、減速中に、あなたは新しい状態を返すために持っているすべての時間。 ので、代わりに次の2行は:

const newTurn = Object.assign(state.currentTurn, action.data); 
return Object.assign(state, { currentTurn: newTurn }); 

あなたは問題がObject.assignである必要があり、この

const newTurn = Object.assign({}, state.currentTurn, action.data); 
return Object.assign(
    {}, 
    state, 
    { currentTurn: newTurn} 
) 

のようなものを書く必要があります。もっと詳しく読む:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

+0

OMG私は何をやったのですか?私はObject.assignについて間違っていると思った...それは純粋だと思った...ありがとう... –

+0

いいえprob!単に 'Object.assign'は最初のパラメータのすべてのプロパティをマージして返しますが、手動で状態を更新しようとするとreduxはうまくいきません – maxgallo

関連する問題