2017-04-10 2 views
5

첫 번째 React/Redux 프로젝트에서 작업하고 있습니다. 모든 것이 잘되어 가고 있었고, 새로운 감속기를 만들려고했습니다. 나는 꽤 단순한 줄 알았지 만, 페이지를로드 할 때 "감속기 X가 초기화 중에 정의되지 않은 값을 반환했습니다."라는 오류 메시지가 나타납니다. 추적 결과 combineReducers()에서이 문제가 발생했다고합니다. 비슷한 질문을 몇 개 찾았지만 문제를 해결하지 못했습니다. 이 질문에초기화 도중 React/Redux 감속기가 정의되지 않음

: Why do I get “Reducer [...] returned undefined during initialization” despite providing initialState to createStore()?

문제는 내가 안할거야 createStore()에 초기 상태 (Initial)를 사용하고 있던 것이 었습니다. 이 질문에

는 : Why does my Redux reducer think my state is undefined?

이 문제는 내가 가지고있는 감속기에서 누락 된 기본 반환 값이었다.

내 감속기 코드는 다음과 같습니다. 나는 처음에 console.log()를 가지고 있으며, 전혀 호출되지 않고있다.

감속기/

import { SORT_CAMPERS } from '../actions/index'; 

export default function(state = null, action) { 
    console.log("action is", action); 
    switch(action.which) { 
     case 'recent': 
     case 'alltime': 
      return action.which; 
      break; 
     default: 
      return state; 
    } 

    return state; 
} 

감속기 /하는 index.js

import { combineReducers } from 'redux'; 
import Campers from './reducer_camper_list'; 
import ActiveSorter from './reducer_which_sorter'; 

const rootReducer = combineReducers({ 
    campers: Campers, 
    activeSorter: ActiveSorter 
}); 

export default rootReducer; 

모든 것이 잘 컴파일 reducer_which_sorter.js. webpack에서 오류가 없습니다. 더블, 트리플, 쿼드 러플로 파일 경로를 확인했습니다. 나는 어떤 오타도 보지 못했다. 아무도 내가 여기에서 놓친 것을 볼 수 있습니까?

+0

오류가 발생하는 줄에 중단 점을 넣고 페이지를 새로 고칩니다. 그런 다음 디버거에서 깨지면 - 일어난 일에 대한 자세한 내용을 알 수 있습니다. – zerkms

답변

2

Redux 요구 사항은 작업에서 type 속성을 사용하는 것이지 which이 아니라 귀하의 예제에서 수행 한 것입니다. console.log 확인이 호출되지 않기 때문에 문제가 다른 감속기에있을 수 있습니다 (질문에 표시되지 않음)

이 문제의 원인은 combineReducers이 특수 INIT 작업 유형으로 감속기 기능을 호출한다는 것입니다.

const initialState = reducer(undefined, { type: ActionTypes.INIT }) 

출처 : https://github.com/reactjs/redux/blob/master/src/combineReducers.js

함수는, 대신 'action.type'의 'action.which'에 전환하기 때문에, 정의되지 않은 제외하고는 아무 것도 반환하지.

+0

필자는 필자의 논리를 변경하여이 코드는 다른 줄이기기에있다. 이제는 모두 작동합니다. 스위치에 대해 당신이 맞다고 생각합니다. – RaneWrites

1

처음에는 console.log()가 있는데, 전혀 호출되지 않습니다.

감속 기능이 @@INIT 동작으로 적어도 한 번 이상 호출되었으므로 이상합니다.

rootReducer이 전혀 호출되지 않았는지 테스트 해보십시오. 다음과 같이 변경하십시오.

const rootReducer = (state = {}, action) => { 
    console.log('Test if rootReducer is ever called') 

    return { 
    campers: Campers(state.campers, action), 
    activeSorter: ActiveSorter(state.activeSorter, action) 
    } 
} 

호출되지 않는 경우 문제는 감속기 자체가 아니라 어딘가에 있습니다.

관련 문제