2016-12-21 1 views
1

Я пытаюсь отправить действие при вводе страницы, но по какой-то причине приводит к бесконечному циклу отправляемого действия.Максимальный размер стека вызовов превышен при отправке действия из onEnter

Вот мой код:

const routes = (store) => { 
    const test = (nextState, replace, callback) => { 
    Promise.resolve(store.dispatch({type: 'test'})).then(callback()); 
    }; 

    return (
    <Route path="/" component={App}> 
     <IndexRoute component={LoginPage}/> 
     <Route path="/home" component={HomePage} onEnter={test}/> 
    </Route> 
    ); 
}; 

Я попытался заменить отправку с помощью простого console.log и этого не происходит. Это только когда я пытаюсь отправить с onEnter

ответ

0

Оказывается, это потому, что я использовал immutablejs и неправильно настроил response-router-redux.

Я имел:

const history = syncHistoryWithStore(browserHistory, store, { selectLocationState(state) { 
    return state 
     .get('routing') 
     .toJS(); 
    }}); 

Я сейчас, используя вместо этого:

const createSelectLocationState =() => { 
    let prevRoutingState, 
    prevRoutingStateJS; 
    return (state) => { 
    const routingState = state.get('routing'); // or state.routing 
    if (typeof prevRoutingState === 'undefined' || prevRoutingState !== routingState) { 
     prevRoutingState = routingState; 
     prevRoutingStateJS = routingState.toJS(); 
    } 
    return prevRoutingStateJS; 
    }; 
}; 

const history = syncHistoryWithStore(browserHistory, store, {selectLocationState: createSelectLocationState()}); 

и он работает правильно.

https://github.com/sjparsons/react-router-redux-immutable

Смежные вопросы