2016-06-23 27 views
0

まず、この問題がChromeコンソール、ReduxまたはJavaScriptオブジェクトに関連しているかどうかはわかりません。Redux reducerでまだ更新されていないコンソール出力状態

私は私の中に、以下の機能を持っているが+ Reduxのアプリに反応:

function InputReducer(state = [{ }], action) { 
    console.log('input-reducer.js', 'state', state[0], JSON.stringify(state[0])); 
    switch (action.type) { 
     case 'STORE_INPUT_VALUE': 
      let newState = {}; 
      newState = state[0]; 
      _.set(newState, action.storePointer, action.value); 
      console.log('input-reducer.js', 'newState', newState, JSON.stringify(newState)); 
      return [newState]; 
     break; 
     default: 
      return state; 
    } 
} 

私は状態が置き換えられ、代わりに更新するべきではありません知っています。今は気にしないでください。これはプロセスの途中です。

これはうまくいきませんが、私は理解できませんが、状態を更新するときにログを見ると、最初のログはnewStateと全く同じオブジェクトを返します。私が知る限り、状態を更新する関数は、ロギングが発生した時点では実行されてはならないので、これは可能ではありません。

これをさらに奇妙にするのは、オブジェクトをストリング化するときに、正しい期待値を返すことです。

私はこのように、いくつかのナンセンス状態を返すように機能を変更する場合:

function InputReducer(state = [{ a: 0 }], action) { 
    console.log('input-reducer.js', 'state', state[0], JSON.stringify(state[0])); 
    switch (action.type) { 
     case 'STORE_INPUT_VALUE': 
      let k = state[0].a + 1 
      let newState = {a: k}; 
      console.log('input-reducer.js', 'newState', newState, JSON.stringify(newState)); 
      return [newState]; 
     break; 
     default: 
      return state; 
    } 
} 

...ログが正しくオブジェクトを表示...または私は彼らがあることを期待するように、少なくとも彼らがいるようです。

この動作に関連するものは何ですか、私はここで何が欠けていますか?

+0

'action.storePointer'と' action.value'の値は何ですか?実際に値を更新していないか、値のパスが無効である可能性があります。 –

+0

@MikeCまあ、パスはlogin.home.userです。値は入力からのものです。しかし、私はこれが問題だとは思わない。値は正しく更新されています。そのIMOでは、最初のログには更新された値は表示されず、古い値が表示されるべきです。 –

+0

コンソールでそれらを比較するときは、オブジェクト参照やJSONを見ていますか?オブジェクトリファレンスは同じですが、JSONは異なるはずです。 –

答えて

1

newState = state[0];は、配列の最初の要素への参照を提供します。

_.set(newState, action.storePointer, action.value);newStateが変更されているため、state[0]が直接変更されています。

関連する問題