2016-10-18 7 views
0
정의되지 않은

로 설정 속성, 나는 다음과 같은 간단한 감속기combineReducer는

let reducer = (prevState = {}, action) => { 
    return { 
     A: A(prevState.A, action), 
     B: B(prevState.B, action) 
    } 
}; 
let A = B = (prevState, action) => { 
    if (action.type == 'foo') 
     return 'bar'; 
    else 
     return prevState; 
}; 

조치, 특히 @@ INIT을 상상해 내 상태가 {A: undefined, B: undefined} 될 원인이됩니다됩니다. 내 상태가 여전히 유지되어야하기 때문에 이상적이 아님 {} now

이것은 combineReducer 패턴을 따르기 때문에 발생합니다. 어쨌든이 문제를 해결하려면?

+0

감속기가 정의되지 않은 초기 상태를 가져야합니다. 그렇지 않으면 다음과 같은 메시지가 표시됩니다. "감속기"... "가 초기화 중에 정의되지 않은 상태로 반환됩니다. 감속기에 전달 된 상태가 정의되지 않은 경우 명시 적으로 초기 상태 초기 상태는 정의되지 않을 수 있습니다. " 그래서 당신이 어딘가에 귀하의 의견에 제안, 그것은 비어있는 같은 초기 상태로하려는 경우 null과 같은 것을 사용하여 종기 것입니다. – WTK

답변

1

귀하의 축소 원이 prevState의 초기 상태 값을 제공하지 않습니다. 따라서 처음으로 A() 또는 B()이 실행되면 prevState이 정의되지 않고 반환됩니다.

Redux 문서의 새로운 "Structuring Reducers" 섹션은 "Initializing State" 가이드의이 내용을 다룹니다.

+0

초기 값은 "누락"이어야하며 존재하지 않아야합니다. 'A (prevState = null)''B (prevState = -1)'와 같은 가정을 모든 곳에 추가해야한다는 것을 의미합니까? 이 속성은 "초기 값"을 가지고 있지 않습니다. – Boyang

+0

초기 값을 제공하지 않아도됩니다. 그러나, 당신이 다른 것을하지 않으면, 지금 당장 {A : undefined, B : undefined}'를 얻을 것입니다. – markerikson