2017-01-18 7 views
4

私はFacebookアプリを開発しており、私はAdonisJSreact-redux-starter-kitという2つの異なるモジュールを使用しています。 、callbackが実行される"アクションに未定義の"タイプ "プロパティがない可能性があります。定数のスペルが間違っていますか?

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 
} 

callback = (r) => { 
    const { addLinkedAccount } = this.props 

    addLinkedAccount({ 
    userId: r.userId, 
    name: r.name, 
    accessToken: r.accessToken, 
    email: r.email 
    }) 
} 

全体アクションファイル:私は、コールバック関数が実行されたときに、ボタンにFacebookのログを使用してログインしたユーザーを保存するために、アクションを持っていますコンソールにエラーメッセージ:

Uncaught Error: Actions may not have an undefined "type" property. Have you misspelled a constant?

答えて

3

addLinkedAccountによって返されたアクションが実際に何typeフィールドを持っていない、まだ読んだときredux-api-middlewareのドキュメントは、これがアクションが構築されるはずのものであると思われます。

あなたのミドルウェアはあなたの店にインストールされていないと思います。ミドルウェアのドキュメントに記載されているように、次のようにストアを作成する必要があります。

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); 
} 
関連する問題