【问题标题】:"Actions may not have an undefined "type" property. Have you misspelled a constant?"“动作可能没有未定义的“类型”属性。您是否拼错了常量?
【发布时间】:2017-01-18 14:56:49
【问题描述】:

我正在开发一个 Facebook 应用程序,我正在使用两个不同的模块:AdonisJSreact-redux-starter-kit。然后,我有一个操作来存储在执行回调函数时使用 Facebook 登录按钮登录的用户:

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
}

callback执行时,控制台报错:

未捕获的错误:操作可能没有未定义的“类型”属性。你有没有拼错一个常数?

【问题讨论】:

    标签: reactjs redux react-redux redux-middleware


    【解决方案1】:

    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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      相关资源
      最近更新 更多