2016-12-12 3 views
0

재 선택을 사용하고 반응을 반복합니다. 기본 모달 구현을위한 선택자를 만들려고합니다.다시 선택하십시오. 정의되지 않음의 'get'속성을 읽을 수 없습니다.

내 선택은

Cannot read property 'get' of undefined 

편집의 오류가 발생

const selectModal = (state) => state.get('modal'); 

이다 : 그것은 어떤 차이가 없어야하지만 내가 선택 모달를 호출하는 방법을 보여 요구되고있다.

const mapStateToProps = createStructuredSelector({ 
    isVisible: selectModalIsVisible(), 
}); 
const mapDispatchToProps = { 
    hideModal, 
    showModal 
}; 
export default connect(mapStateToProps, mapDispatchToProps)(Modal); 

나는이 모달 상태 컨테이너가 아마도 내 감속기를 설정하고 또는 잘못 저장

발견되지 않는 것을 의미 믿습니다. 내 감속기와 결합

function modalReducer(state = initialState, action) { 
    switch (action.type) { 
    case HIDE_MODAL: 
     return state.set(
     'isVisible', false); 
    case SHOW_MODAL: 
     return state.set(
     'isVisible', true); 
    default: 
     return state; 
    } 
} 

는 글로브

export default function createReducer(asyncReducers){ 
    return combineReducers({ 
    route: routeReducer, 
    auth: authReducer, 
    modal: modalReducer, 
    ...asyncReducers 
    }); 
} 

에 감속기를 결합하고 내 가게에 주입

function configureStore(initialState = {}, history) { 
    const middlewares = [ 
    sagaMiddleware, 
    routerMiddleware(history), 
    ]; 
    const enhancers = [ 
    applyMiddleware(...middlewares), 
    ] 
    const store = createStore(
    createReducer(), 
    fromJS(initialState), 
    compose(...enhancers) 
); 

    store.runSaga = sagaMiddleware.run; 
    //store.close =() => store.dispatch(END) 

    store.runSaga(sagas); 
    store.asyncReducers = {}; 
    return store; 
} 
var initialState = {} 
const store = configureStore(fromJS(initialState), browserHistory); 

재 선택에서 오류가 라인 74분의 73 PARAMS에있다 = dependencies.map

var selector = function selector(state, props) { 
    for (var _len4 = arguments.length, args = Array(_len4 > 2 ? _len4 - 2 : 0), _key4 = 2; _key4 < _len4; _key4++) { 
    args[_key4 - 2] = arguments[_key4]; 
    } 

    var params = dependencies.map(function (dependency) { 
    return dependency.apply(undefined, [state, props].concat(args)); 
    }); 
    return memoizedResultFunc.apply(undefined, _toConsumableArray(params)); 
}; 

그래서 내가 뭘 잘못하고있다, 내가 모드에 액세스 할 immutableJS 다르게 뭔가를 할 필요가 또는 응용 프로그램에 대한 잘못된 설정입니까? 보내 주신 의견에 미리 감사드립니다.

+0

selectModal''호출하는 코드를 추가하십시오 : 그것은 단지

(state) => state.get('modal')는 일반적으로 createStructuredSelector의 내 용도 중 하나

const getThing = (state, props) => state.things[props.thingId]; const getModal = state => state.get('modal'); const mapStateToProps = createStructuredSelector({ thing: getThing, // notice no parens modal: getModal, // notice no parens }) 

모양을 또는 내가 선택 공장을 필요로하는 경우 받아 들일 것입니다. –

+0

@JimBolla 오류는 그 시점보다 오래 전에 호출되므로 아무런 차이가 없어야합니다. 나는 더 많은 것을 보여주는 것이 혼란스러워할지 모르지만 나는 그것을 추가했다. – mibbit

+0

대부분의 셀렉터는'selector = state => doSomething (state)'형태이며, selector =() => (state) => doSomething (state)'입니다. 내가 놓친 게 있니? –

답변

1

selectModalIsVisible을 사용하는 것처럼 selectModal을 사용하는 경우 구문이 잘못되었습니다. 나는 꽤 확신한다 createStructuredSelector() => (state) => state.get('modal')을 이해하지 못한다.

// just pretend this selector was more complicated and needed memoization 
const makeGetThing =() => createSelector(
    state => state.things, 
    (state, props) => props.thingId, 
    (things, thingId) => things[thingId]); 
const getModal = state => state.get('modal'); 

const makeMapStateToProps =() => createStructuredSelector({ 
    thing: makeGetThing(), // yes parens 
    modal: getModal, // no parens 
}) 
+0

피드백을 보내 주셔서 감사합니다. @ jim-bolla 코드 예제에서이 구문이 작동하는 동안이 구문을 보았습니다. 그러나 내가 const = (state) => state.get ('modal')으로 되돌려도 동일한 결과를 얻습니다. 내 셀렉터를 제 가게에 제대로 연결하지 않을지 궁금합니다. 아니면 내 가게가 제대로 만들어지지 않았습니다. – mibbit

+0

다음은() => (상태) => 패턴의 예입니다. https://github.com/mxstbr/react-boilerplate/blob/master/app/containers/HomePage/selectors.js – mibbit

관련 문제