2015-11-25 3 views
1

У меня, кажется, странная ошибка. В настоящее время я использую Redux изоморфно и также включаю redux-thunk в качестве промежуточного программного обеспечения для асинхронных действий. Вот что мой магазин конфигурация выглядит следующим образом:Приложение Isomorphic Redux не регистрирует Redux-Thunk?

// Transforms state date from Immutable to JS 
const transformToJs = (state) => { 
    const transformedState = {}; 

    for (const key in state) { 
    if (state.hasOwnProperty(key)) transformedState[key] = state[key].toJS(); 
    } 
    return transformedState; 
}; 


// Here we create the final store, 
// If we're in production, we want to leave out development middleware/tools 
let finalCreateStore; 
if (process.env.NODE_ENV === 'production') { 
    finalCreateStore = applyMiddleware(thunkMiddleware)(createStore); 
} else { 
    finalCreateStore = applyMiddleware(
    createLogger({transformer: transformToJs}), 
    thunkMiddleware 
)(createStore); 
} 

// Exports the function that creates a store 
export default function configureStore(initialState) { 
    const store = finalCreateStore(reducers, initialState); 

    if (module.hot) { 
    // Enable Webpack hot module replacement for reducers 
    module.hot.accept('.././reducers/index',() => { 
     const nextRootReducer = require('.././reducers/index'); 
     store.replaceReducer(nextRootReducer); 
    }); 
    } 

    return store; 
} 

Странная часть о том, что я не думаю, что нет ничего плохого с этим файлом, потому что мой createLogger применяются только штрафом. Он регистрирует все мои действия и состояние, но в тот момент, когда я возвращаю функцию вместо объекта в создателе действия, выполнение теряется. Я пытался бросить в debugger заявления, которые никогда не попадают и не переупорядочивают промежуточное программное обеспечение, похоже, не помогают.

createUser(data) { 
    // This `debugger` will hit 
    debugger; 
    return (dispatch) => { 
    // This `debugger` will NOT hit, and any code within the function will not execute 
     debugger; 
     setTimeout(() => { 
     dispatch(
      AppActionsCreator.createFlashMessage('yellow', 'Works!') 
     ); 
     }, 1000); 
    }; 
    }, 

Кто-нибудь испытал что-то подобное раньше?

ответ

1

DOH! Я не отправлял действие. Я только называл создателя действия. Мне нужно привыкнуть к этому с помощью Redux!

Как я думал я вызова действия: AppActionCreators.createFlashMessage('some message');

Как на самом деле вызывать действие в Redux: this.context.dispatch(AppActionCreators.createFlashMessage('some message'));

Где dispatch является метод, предоставляемый магазином Redux, и может быть передается каждому дочернему компоненту приложения через React's childContextTypes

+1

Возможно проиллюстрируйте свой ответ кодом. Какое ваше решение и, возможно, даже объясните, что пошло не так, чтобы другие могли избежать ошибки. –

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