我正在开发一个Facebook应用程序,我正在使用两个不同的模块: AdonisJS和 react-redux-starter-kit.我有一个操作来存储在执行回调函数时使用Facebook登录按钮登录的用户: callback = (r) = { const {
callback = (r) => { const { addLinkedAccount } = this.props addLinkedAccount({ userId: r.userId, name: r.name, accessToken: r.accessToken, email: r.email }) }
整个行动档案:
import { CALL_API } from 'redux-api-middleware' // ------------------------------------ // Constants // ------------------------------------ export const ADD_LINKED_ACCOUNT = 'linkedAccount:add_linked_account' export const ADD_LINKED_ACCOUNT_SUCCESS = 'linkedAccount:add_linked_account_success' export const ADD_LINKED_ACCOUNT_FAIL = 'linkedAccount:add_linked_account_fail' // ------------------------------------ // Actions // ------------------------------------ export function addLinkedAccount ({ userId, name, accessToken, email }) { return { [CALL_API]: { endpoint: '/api/linked-accounts', method: 'POST', headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' }, body: JSON.stringify({ userId, name, accessToken, email }), types: [ADD_LINKED_ACCOUNT, ADD_LINKED_ACCOUNT_SUCCESS, ADD_LINKED_ACCOUNT_FAIL] } } } export const actions = { addLinkedAccount } // ------------------------------------ // Action Handlers // ------------------------------------ const ACTION_HANDLERS = { [ADD_LINKED_ACCOUNT]: state => ({ ...state, addingLinkedAccount: true }), [ADD_LINKED_ACCOUNT_SUCCESS]: (state, action) => ({ ...state, addingLinkedAccount: false, addLinkedAccountSuccess: true, linkedAccount: action.payload }), [ADD_LINKED_ACCOUNT_FAIL]: (state, action) => ({ ...state, addingLinkedAccount: false, addLinkedAccountError: action.payload.response.error }) } // ------------------------------------ // Reducer // ------------------------------------ const initialState = { addingLinkedAccount: false, addLinkedAccountSuccess: false, linkedAccount: null, addLinkedAccountError: {} } export default function linkedAccountReducer (state = initialState, action) { const handler = ACTION_HANDLERS[action.type] return handler ? handler(state, action) : state }
执行回调时,控制台中的错误消息:
addLinkedAccount返回的操作确实没有类型字段,但在阅读redux-api-middleware的文档时,似乎这正是应该如何构造操作的.Uncaught Error: Actions may not have an undefined “type” property. Have you misspelled a constant?
我的猜测是你没有将中间件安装到你的商店.如中间件文档中所述,您必须像这样创建商店:
import { createStore, applyMiddleware, combineReducers } from 'redux'; import { apiMiddleware } from 'redux-api-middleware'; import reducers from './reducers'; const reducer = combineReducers(reducers); // the next line is the important part const createStoreWithMiddleware = applyMiddleware(apiMiddleware)(createStore); export default function configureStore(initialState) { return createStoreWithMiddleware(reducer, initialState); }