2016-06-23 4 views
0

우선이 문제가 Chrome 콘솔, Redux 또는 JavaScript 객체와 관련이 있는지 잘 모릅니다. Redux reducer에서 아직 업데이트되지 않은 콘솔 출력 상태

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]이 직접 수정됩니다.