2016-07-15 2 views
0

мне очень нравится идея иметь действия, написанные, как это:Redux промежуточного слоя с обратным вызовом

function signUp(data, callback) { 
return { 
    [CALL_API]: { 
     type: 'SOME_TYPE', 
     url: `/api/account/signup`, 
     method: 'POST', 
     data: data 

    } 
    } 
} 

Но вещи, как signUp я не хочу, чтобы изменить/трогайте магазин получить обратный вызов от сервера


В моем компоненте Реагировать у меня есть действие, которое вызывает апи через действие и изменяет состояние.

this.signUp($(form).serialize(), function(data) { this.setState({response: data}); }.bind(this)) 

и действие signUp выглядит следующим образом

function signUp(data, callback) { 
postRequest(
    '/api/account/signup', 
    data, 
    'POST', 
    callback) 
} 


function postRequest(url, data, method, callback) { 
callback(true); //// just testing 
} 

Как вы можете видеть, синтаксис и длину кода довольно не по сравнению с первым один


Вопрос: Есть ли способ модифицировать промежуточное ПО сокращения или иметь альтернативную функцию JSON ion (аналогично CALL_API), чтобы принимать обратные вызовы к компоненту, не касаясь магазина? Я действительно хочу, чтобы использовать CALL_API синтаксис :)

ответ

0

Вы можете написать промежуточное программное обеспечение для перехвата действий и выполнить некоторую работу без изменения состояния хранилища.

// Action creator  
function signUp(data, callback) { 
    return { 
     type: CALL_API 
     url: '/api/account/signup', 
     method: 'POST', 
     data: data, 
     callback: callback 
    } 
} 

// Middleware 
const actionInterceptor = store => next => action => { 
    if (action.type === CALL_API) { 
     postRequest(action.url, action.method, action.data, action.callback); 
    } 
    else { 
     return next(action); 
    } 
} 

... 

const store = createStore(reducer, initialState, applyMiddleware(actionInterceptor)); 
+0

Спасибо, но я получаю 'callback undefined'. Вы протестировали этот код? – Fox

+0

Я сделал редактирование для добавления обратного вызова к действию и способа его использования в перехватчике. –

+0

спасибо, что будет делать :) – Fox

0

Мне очень нравится идея иметь действия письменной, как это:

...

Но вещь, как SIGNUP я не хочу, чтобы изменить/коснитесь магазина, чтобы получить обратный вызов с сервера

Хорошо, но зачем использовать сокращение для этого?

То, что я понял:
вы хотели бы назвать dispatch(signUp(data, callback)) (упрощенный)

Ваш SIGNUP actionCreator должен выглядеть следующим образом:

function signUp(data, callback) { 
    return function(dispatch) { 
    //.. do your stuff with data.. 
    //.. and call your callback or pass it to another function 
    } 
} 

Извините, если не поняли вашу проблему, пожалуйста, напишите, если что-то комментарий пока неясно.

+0

Спасибо, CALL_API - это тип действия, которое я хочу иметь для простых запросов GET/POST от компонентов. Таким образом, «отправка» не помогает, поскольку используется для уведомления редуктора, который в конечном итоге изменяет состояние/хранилище – Fox

+0

@Fox нормально, как ваше сообщение связано с сокращением? – webdeb

+0

@Fox по дизайну ДЕЙСТВИЯ в Redux связаны с состоянием. Вы хотите некоторые другие эффекты. Это не проблема, вы можете это сделать, но тогда это не редукция. – webdeb

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