2016-09-14 3 views
1

Я пытаюсь заставить мое приложение не жаловаться, что действие не имеет неопределенного свойства типа.Как правильно использовать redux-thunk, с React?

Я настроил мой стороне клиента визуализации следующим образом:

import React from 'react'; 
import ReactDOM from 'react-dom'; 
import routes from './shared/routes'; 
import rootReducer from './shared/reducers'; 
import thunk from 'redux-thunk'; 
import { createStore, applyMiddleware } from 'redux'; 
import { Provider } from 'react-redux'; 

let initialState = window.__INITIAL_STATE_; 

const store = createStore(rootReducer, initialState, applyMiddleware(thunk)); 

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

который я считал, что правильный путь?

+1

Знаете ли вы, что redux-thunk проверяет, действительно ли действие, если функция и если оно есть, затем вызывает эту функцию? – denysdovhan

+0

Да, вы можете вызвать функцию в отличие от объекта, содержащего тип и полезную нагрузку. Мой код, кажется, отключается при вызовах с помощью отправки (myAction()) внутри этой функции. Если это имеет смысл вообще? Мой код можно найти здесь: https://github.com/designspin/react-redux-universal – Jason

+0

Какие действия вы хотите сделать? В общем, вы будете использовать thunks для отправки асинхронных действий. –

ответ

1

Да. На странице gitub redux-thunk есть отличный пример того, как ее использовать.

Для ваших действий, если это действие асинхронного, я использую этот подход, чтобы направить действия асинхронных обещаний:

Действие:

export function add({name, time}) { 
    return dispatch => { 
    dispatch({type: ADD}); 
    return postJSON('/api/services', { 
     name, 
     time, 
    }) 
    .then(service => { 
     dispatch({ 
     type: ADD_SUCCESS, 
     service: service, 
     }); 
    }) 
    .catch(error => { 
     dispatch({ 
     type: ADD_FAILURE, 
     error, 
     }); 
    }); 
    }; 
} 

Внутри моего компонента:

addService() { 
    const { dispatch } = this.props; 
     return (fields) => { 
     dispatch(add(fields)); 
     dispatch(toggleAddForm()); 
     }; 
    } 
+0

Полный исходный код, который вы можете увидеть в качестве примера простого проекта, находится здесь: https://github.com/francorisso/hairdresser –

+0

Так что я не могу это сделать? Поместите функцию внутри отправки, например dispatch (loginUserRequest()). Вы можете увидеть мои действия здесь: https://github.com/designspin/react-redux-universal/blob/master/src/shared/actions/index.js – Jason

+0

@ Джейсон, вы делаете то же самое правильно? Создайте создателей действия, которые возвращают функцию, правильно? Таким образом, в основном способ, которым он должен работать, - это действия, которые создатели должны возвращать функции, которые thunk заботится, а создатель последнего действия в цепочке должен возвращать простой объект. Поэтому я думаю, вы делаете это правильно. –

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