2017-01-12 9 views
0

Вслед за example обеспечиваются документы Redux у меня есть установка мои действия создателя, как так:«Не удается прочитать свойство„ затем“неопределенных», когда диспетчерские действие

export function createAlbumType(props) { 
    return function (dispatch, getState) { 
    dispatch({ 
     type: CREATE_ALBUM_TYPE_REQUEST, 
    }); 

    axios.post(`${ALBUM_TYPES_URL}`, props).then(
     response => dispatch({ 
     type: CREATE_ALBUM_TYPE_SUCCESS, 
     response, 
     }), 
     error => dispatch({ 
     type: CREATE_ALBUM_TYPE_FAILURE, 
     error, 
     }) 
    ); 
    }; 
} 

После моего типа альбома успешно сохранен я бы например, просто перенаправить пользователя обратно на индексную страницу. К сожалению, я не получаю обещание после отправки. Основываясь на моем коде, какая проблема? Я использую redux-thunk как мое промежуточное ПО и react-redux-router для маршрутизации.

onCreateSubmit(values) { 
    const { dispatch } = this.props; 

    return dispatch(createAlbumType(values)) 
     .then((action) => { 
     if (action.type === 'CREATE_ALBUM_TYPE_SUCCESS') { 
      dispatch(push('/album_types')); 
     } 
     }); 
    } 

const store = createStore(reducers, {}, compose(
    applyMiddleware(
     routerMiddleware(browserHistory), 
     thunkMiddleware 
    ), 
    window.devToolsExtension ? window.devToolsExtension() : f => f 
) 
); 

const history = syncHistoryWithStore(browserHistory, store) 

ReactDOM.render(
    <Provider store={ store } > 
    <Router history={ history } routes={ routes } /> 
    </Provider>, 
    document.getElementById('root') 
); 

ответ

1

Действие перевождь не возвращается обещание. Вы должны вернуть функцию axios.post.

export function createAlbumType(props) { 
    return function (dispatch, getState) { 
    dispatch({ 
     type: CREATE_ALBUM_TYPE_REQUEST, 
    }); 

    return axios.post(`${ALBUM_TYPES_URL}`, props).then(
     response => dispatch({ 
     type: CREATE_ALBUM_TYPE_SUCCESS, 
     response, 
     }), 
     error => dispatch({ 
     type: CREATE_ALBUM_TYPE_FAILURE, 
     error, 
     }) 
    ); 
    }; 
} 
0

Я не рекомендую делать это:

return dispatch(createAlbumType(values)) 
    .then((action) => { 
    if (action.type === 'CREATE_ALBUM_TYPE_SUCCESS') { 
     dispatch(push('/album_types')); 
    } 
    }); 
} 

Вы изобретая редуктор здесь с этим if (action.type). Вы должны отправить от вашего createAlbumType действие, внутри .post().then(). Таким образом, все должно быть там, где должно быть.

+0

Вы предлагаете ввести метод push в создателе действия? –

+0

Вы делаете что-нибудь еще с действием 'CREATE_ALBUM_TYPE_SUCCESS'? Возможно, вы можете просто называть 'dispatch (push ('/ album_types'));' внутри '.then ('. – Tiago

+0

Я думаю, что следую за вами, но для дальнейшего уточнения вы сможете представить полный пример? –