Я новичок в использовании redux-pack, но мне нравится, как подход с обещаниями действительно очищает код и делает каждый шаг очень ясным.Однако я столкнулся с проблемой, когда обещание исчезает, и возникает ошибка.Мой код выглядит следующим образом:
actions.js
import * as types from './action_types';
import * as services from '../services';
export const login = (email, password) ({type: types.LOGIN, promise: services.login(email, password)});
services.js
const checkResponse = (response) => {
if (response.ok) {
return response;
} else {
let error = new Error(response.statusText);
error.response = response;
throw error;
}
};
export const login = (email, passowrd) => {
let request = new Request('/login', {method: 'POST', body: {email: email, password: password}});
return fetch('/login', request)
.then(checkResponse)
.then(response => response.json())
.catch(error => error);
};
reducer.js
import handle from 'redux-pack';
import * as actions from '../actions';
const INITIAL_STATE = {
loggedin: false,
isworking: false,
err: null,
};
export default function reducer(state = INITIAL_STATE, action) {
const { type, payload } = action;
switch (type) {
case actions.LOGIN:
return handle(state, action, {
start: prevState) => ({...prevState, isworking: true, err: null}),
finish: prevState => ({ ...prevState, isworking: false }),
failure: prevState => ({ ...prevState, err: payload }),
success: prevState => ({ ...prevState, loggedin: payload.ok })
});
default:
return state;
}
}
Однакокогда я запускаю этот код, я получаю следующую ошибку, когда запускаю действие:
TypeError: Object is not a function (near '...(0, _reduxPack2.default)...')
Я установил код для вывода на консоль и мог видеть, что следующие шаги выполняются непосредственно перед ошибкой:
[Log] Login login, called +0ms (client.js, line 7245)
[Log] Login props = {"match":{"path":"/login","url":"/login","isExact":true,"params":{}},"location":{"pathname":"/login","state":{"from":"/authRoute"},"search":"","hash":"","key":"6gnu0d"},"history":{"length":72,"action":"REPLACE","location":{"pathname":"/login","state":{"from":"/authRoute"},"search":"","hash":"","key":"6gnu0d"}},"isworking":false,"loggedin":false,"err":null} +1ms (client.js, line 7245)
[Log] Login mapDispatchToProps, login dispatched. +0ms (client.js, line 7245)
[Log] actions login, called +0ms (client.js, line 7245)
[Log] services login, called. +0ms (client.js, line 7245)
[Log] actions promise = [object Promise] +2ms (client.js, line 7245)
[Log] actions action = {"type":"LOGIN","promise":{}} +0ms (client.js, line 7245)
[Log] reducer reducer called +4s (client.js, line 7245)
[Log] reducer state is: {"loggedin":false,"isworking":false,"err":null} +0ms (client.js, line 7245)
[Log] reducer action type is: "LOGIN" +0ms (client.js, line 7245)
[Log] reducer action promise is: undefined +0ms (client.js, line 7245)
[Log] reducer action payload is: undefined +0ms (client.js, line 7245)
У меня также был некоторый ожидаемый результат в функции запуска в редукторе, и он никогда не вызывался.В приведенном выше «Login» - это компонент React, и я вижу, что он выполняет вызов, реквизиты находятся в ожидаемом состоянии, и вызов входа в систему отправляется.Затем я вижу, как действие вызывает службу, получает сгенерированное обещание и строит полное действие.Вызывается редуктор, и состояние выглядит так, как ожидается, тип действия такой же, как и ожидалось, но обещающая часть действия не определена, я подозреваю, что это может быть причиной вызова обработчиком пакета реакции с ошибкой.Любые предложения о том, что попробовать или где посмотреть, приветствуются!